为什么我在 PostgreSQL 中有缓慢的 COMMIT?

主要观点:客户发现数据库中耗时的语句中有COMMIT,需调查其变慢原因,本文探讨了慢COMMIT的可能原因及应对措施。
关键信息

  • 基本COMMIT活动在 PostgreSQL 中很简单,只需设置事务位等,COMMITROLLBACK通常很快。
  • COMMIT最常见原因是磁盘问题,如 Linux 可通过vmstat等命令检查磁盘 I/O 情况,NAS 要检查 TCP 网络等。
  • 阅读 PostgreSQL 源代码可了解事务提交时的情况,慢COMMIT在特殊情况下有多种原因,通常是以下三种情况。
  • 延迟约束和触发器会使COMMIT变慢,因在提交时检查,大量检查会累积影响COMMMIT
  • HOLD的游标会在提交时物化结果集,使COMMIT变慢,可通过调优查询加快提交。
  • 同步复制会使COMMIT时间变长,尤其是主从之间网络延迟高时。
  • 第三方扩展可能导致COMMIT变慢,如远程数据源的事务处理。
    重要细节
  • COMMIT相关操作在 PostgreSQL 多版本架构下通常很快,只需在提交日志中注册事务状态。
  • 磁盘问题检查方法,如 Linux 命令vmstat 1等,NAS 要检查 TCP 网络。
  • 延迟约束示例代码及使用场景,如创建带延迟外键的表。
  • HOLD游标用于实现分页等,要注意关闭避免资源占用。
  • 同步复制的操作顺序及网络延迟对COMMIT的影响。
  • 第三方扩展可通过RegisterXactCallback()注册回调在提交时执行。
阅读 7
0 条评论