Mysql 术后缓慢和延迟插入
我有和问题的数据库插入缓慢和延迟的方式。 在这种情况下,我有一个表Mysql 术后缓慢和延迟插入,mysql,sql,performance,postgresql,Mysql,Sql,Performance,Postgresql,我有和问题的数据库插入缓慢和延迟的方式。 在这种情况下,我有一个表mobiledata,它的插入量很高。它有一个主键id(bigserial)。id nextval来自序列mobiledata_seq。 当我看到表中的插入时,插入的行缺少序列。此外,该行在一段时间后插入,例如10秒 这种情况在极少数情况下发生,有时它就像一个符咒 例如: Select id from missingdata order by id desc limit 100; 输出 611815 611813 611810
mobiledata
,它的插入量很高。它有一个主键id(bigserial)。id nextval来自序列mobiledata_seq。
当我看到表中的插入时,插入的行缺少序列。此外,该行在一段时间后插入,例如10秒
这种情况在极少数情况下发生,有时它就像一个符咒
例如:
Select id from missingdata order by id desc limit 100;
输出
611815
611813
611810
611809
611807
611805
611804
611802
611801
611800
611799
611798
611797
611796
611795
若您的插入率很高,那个么服务器很可能正在努力将您的数据刷新到磁盘。另一种可能性是,如果您在此表上创建了太多索引,服务器必须在insert期间更新所有索引,这可能会非常昂贵 解决办法可以是:
- 在postgresql.conf上运行pgtune实用程序,确保服务器配置合理
- 在此表上删除一些不必要的索引
- 改进磁盘子系统,例如安装SSD
- 添加内存
这是否正常很难说——取决于您的工作流程。但您不应该试图收回丢失的ID—在事务数据库中,这根本不值得。听起来更像是一些事务正在丢弃来自
nextval
的调用。序列生成列中的间隙并不意味着缺少某些内容。序列缓存也可以在这里发挥作用。首先:检查postgres日志文件(可能还有应用程序日志文件,如果有的话)将数据刷新到磁盘与“查看”SQL中的数据无关。如果他的插入速率高于磁盘流速度,服务器将颠簸,很难响应大多数查询。插入(或提交)可能需要一些时间才能成功。但是,如果提交成功,即使数据没有被物理地写入数据库,结果也将对其他人可见disk@a_horse_with_no_name:如果提交成功,数据将物理写入磁盘。如果情况并非如此,则不能将其称为提交(除非您玩危险游戏并设置fsync=off)
output
611815
611813
611810
611809
611807
611805
611804
611802
611801
611800
611799
611798
611797
611796
611795