在PostgreSQL数据库中慢速同时写入同一个表

时间:2014-07-28 21:25:22

标签: sql database postgresql

我怀疑这个问题可能更适合数据库管理员网站,所以LMK如果是,我会移动它。 :)

我是一个数据库/ Postgres初学者,所以请帮帮我。我有一个系统设置为并行处理10件事,并将这些东西的输出写入同一Postgres数据库中的同一个表。写入发生正常,但他们永远 。我的日志文件显示我有30,000个这样的结果,但只有7,000个反映在数据库中。

我怀疑Postgres出于某种原因排队写入,我的猜测是因为该表有一个自动递增的主键。如果我试图同时将10条记录写入同一个表,我会假设它们必须排队,否则主键是如何设置的?

我有这个权利,还是我的数据库可怕的配置错误?我的系统管理员通常不会做数据库,所以如果你有任何调整建议,甚至是基本的东西,我很高兴听到它们。 :)

1 个答案:

答案 0 :(得分:6)

  

我怀疑Postgres出于某种原因排队写入,我的猜测是因为该表有一个自动递增的主键。如果我试图同时将10条记录写入同一个表,我会假设它们必须排队,否则主键是如何设置的?

不,那不是。

如果您阅读the documentation on sequences,您会发现他们因此而特别免除了事务可见性和回滚功能。使用nextval生成的ID在回滚时不会重复使用。

  

我有这个权利,还是我的数据库可怕的配置错误?我的系统管理员通常不会做数据库,所以如果你有任何调整建议,甚至是基本的东西,我很高兴听到它们。 :)

您更有可能在一个系统上进行单独提交,每个插件一次,这个系统的速度非常慢fsync()就像一个磁性硬盘驱动器一样。您可能还将检查点间隔设置得太低(请参阅PostgreSQL日志,如果出现此情况,将显示有关此问题的警告),可能有太多索引导致速度减慢等等。

您应该查看PostgreSQL日志。

另请参阅the primer I wrote on the topic of improving insert performance