我遇到数据库插入缓慢且延迟的问题。
情况如何,我有一个表 mobiledata
,其中插入量很高。它有一个主键 id (bigserial)。 id nextval 来自序列 mobiledata_seq。
当我看到表中的插入时,该行被插入但缺少序列。另外,该行会在一段时间(例如 10 秒)后插入
这种情况很少发生,但有时它就像一种魅力。
示例:
Select id from missingdata order by id desc limit 100;
output 611815 611813 611810 611809 611807 611805 611804 611802 611801 611800 611799 611798 611797 611796 611795
最佳答案
如果您的插入率非常高,则服务器可能正在努力将数据刷新到磁盘。另一种可能性是,如果您在此表上创建了太多索引,服务器必须在插入期间更新所有索引,这可能会变得非常昂贵。
解决方案可能是:
- 在 postgresql.conf 上运行 pgtune 实用程序以确保您的服务器配置合理
- 在此表上删除一些不必要的索引
- 改进磁盘子系统,例如安装SSD
- 添加内存
至于丢失 id - 如果某些插入事务因任何原因回滚(包括客户端突然关闭连接),就会发生这种情况。
很难说这是否正常 - 取决于您的工作流程。但您不应该尝试回收丢失的 ID - 在事务数据库中,这根本不值得。
关于mysql - Postgres 缓慢且延迟的插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25721974/