我怀疑这个问题可能更适合数据库管理员站点,所以如果是LMK,我将其移开。:)
我是这里的数据库/ Postgres初学者,所以请帮帮我。我有一个系统设置为并行处理10个事物,并将这些事物的输出写入同一Postgres数据库中的同一表中。写的不错,但是会永远长久。我的日志文件显示,我将获得30,000种结果,但其中只有7,000种反映在数据库中。
我怀疑Postgres出于某种原因正在排队写操作,而我猜这是因为该表具有自动递增的主键。如果我试图同时将10条记录写到同一张表中,我会假设它们必须排队,因为否则将如何设置主键?
我是否拥有此权利,或者我的数据库配置严重错误?我的系统管理员通常不做数据库,因此,如果您有任何调优建议,甚至是基本的建议,我都会很高兴听到它们。:)
我怀疑Postgres出于某种原因正在排队写操作,而我猜这是因为该表具有自动递增的主键。如果我试图同时将10条记录写到同一张表中,我会假设它们必须排队,因为否则将如何设置主键?
不,不是这样。
如果您阅读有关序列的文档,您会发现它们专门出于此原因而不受事务可见性和回滚的影响。生成的IDnextval
不会在回滚时重新使用。
我是否拥有此权利,或者我的数据库配置严重错误?我的系统管理员通常不做数据库,因此,如果您有任何调优建议,甚至是基本的建议,我都会很高兴听到它们。:)
您很有可能在速度非常慢fsync()
的系统(如单个磁硬盘)上进行单个提交(每个插入一次)。您也可能将检查点间隔设置得太低(请参阅PostgreSQL日志,如果出现此警告,则会出现有关此警告的信息),索引过多可能会导致速度降低等。
您应该查看PostgreSQL日志。
另外,请参阅我写的关于提高刀片性能的入门文章。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句