我怀疑这个问题可能更适合数据库管理员网站,所以LMK如果是,我会移动它。 :)
我是一个数据库/ Postgres初学者,所以请帮帮我。我有一个系统设置为并行处理10件事,并将这些东西的输出写入同一Postgres数据库中的同一个表。写入发生正常,但他们永远 。我的日志文件显示我有30,000个这样的结果,但只有7,000个反映在数据库中。
我怀疑Postgres出于某种原因排队写入,我的猜测是因为该表有一个自动递增的主键。如果我试图同时将10条记录写入同一个表,我会假设它们必须排队,否则主键是如何设置的?
我有这个权利,还是我的数据库可怕的配置错误?我的系统管理员通常不会做数据库,所以如果你有任何调整建议,甚至是基本的东西,我很高兴听到它们。 :)
答案 0 :(得分:6)
我怀疑Postgres出于某种原因排队写入,我的猜测是因为该表有一个自动递增的主键。如果我试图同时将10条记录写入同一个表,我会假设它们必须排队,否则主键是如何设置的?
不,那不是。
如果您阅读the documentation on sequences,您会发现他们因此而特别免除了事务可见性和回滚功能。使用nextval
生成的ID在回滚时不会重复使用。
我有这个权利,还是我的数据库可怕的配置错误?我的系统管理员通常不会做数据库,所以如果你有任何调整建议,甚至是基本的东西,我很高兴听到它们。 :)
您更有可能在一个系统上进行单独提交,每个插件一次,这个系统的速度非常慢fsync()
就像一个磁性硬盘驱动器一样。您可能还将检查点间隔设置得太低(请参阅PostgreSQL日志,如果出现此情况,将显示有关此问题的警告),可能有太多索引导致速度减慢等等。
您应该查看PostgreSQL日志。
另请参阅the primer I wrote on the topic of improving insert performance。