Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 术后缓慢和延迟插入_Mysql_Sql_Performance_Postgresql - Fatal编程技术网

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——如果某些插入事务由于任何原因回滚,包括客户端突然关闭连接,就会发生这种情况


这是否正常很难说——取决于您的工作流程。但您不应该试图收回丢失的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