主要观点:客户发现数据库中耗时的语句中有COMMIT
,需调查其变慢原因,本文探讨了慢COMMIT
的可能原因及应对措施。
关键信息:
- 基本
COMMIT
活动在 PostgreSQL 中很简单,只需设置事务位等,COMMIT
和ROLLBACK
通常很快。 - 慢
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()
注册回调在提交时执行。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。