为何单条SELECT COUNT(*)查询会引发PostgreSQL多事务?
问题解答
- pgAdmin后台监控任务:pgAdmin会定期执行后台查询来更新仪表盘监控数据、获取数据库元信息,这些查询会开启独立事务,你看到的额外事务大概率是这些后台操作产生的,而非你手动执行的
COUNT(*)查询。 - 自动提交的隐性小查询:PostgreSQL默认开启自动提交模式,每个独立查询都会被包装成单个事务。pgAdmin在执行你的
COUNT(*)前后,可能会自动执行一些小查询(比如获取表的统计信息、验证连接状态),这些都会被统计为单独事务。 - 自动统计收集触发:如果数据库的自动统计收集进程(与AutoVacuum相关)刚好在你执行查询的时段运行,它产生的事务也会被计入监控图表的事务数中。
- 连接复用的残留事务:若pgAdmin使用了连接池,复用的连接可能带有之前会话的事务残留,不过这种情况出现的概率较低。
你可以通过psql客户端直接执行SELECT COUNT(*) FROM PICTURES;,同时监控事务数。如果psql下仅产生1个事务,就能确认是pgAdmin自身操作导致的额外计数。
内容的提问来源于stack exchange,提问作者Harsha Limaye
相关产品推荐
相关产品推荐

