pgAdmin查看Postgres explain analyze结果出现负排他时间问题咨询
负排他时间的合理成因
- 这是pgAdmin 4.16及更早版本的已知计算逻辑缺陷,和PostgreSQL原生explain analyze的输出准确性无关。
- pgAdmin计算排他时间的默认逻辑是「当前节点的总耗时减去所有直接子节点的总耗时」,但这个逻辑没有适配并行查询场景:你遇到的问题里,Gather Merge的子Group节点是并行执行的,子节点统计的总耗时是所有worker进程+leader进程的执行时间累加值,而父节点Gather Merge的总耗时是单进程的墙钟时间,并行子节点的累加耗时本身就会高于父节点的单份墙钟耗时,直接相减自然会得到负数。
- 你核对原生输出的结论是对的,原生输出里Gather Merge节点的实际总耗时2925.966ms确实高于子Group节点的单实例执行时间,不存在父节点耗时低于子节点的问题,只是pgAdmin的计算逻辑有误。
pgAdmin可视化结果的可信度判断
- 不涉及并行查询的场景下,pgAdmin的可视化耗时统计可以正常参考;只要出现并行执行的节点,排他时间的数值完全不可信,不过inclusive(总包含)时间是直接读取的PostgreSQL原生输出结果,是准确的。
- 你可以升级pgAdmin到4.20及以上版本,该版本已经修复了并行查询场景下的排他时间计算逻辑,不会再出现负数结果。
内容的提问来源于stack exchange,提问作者szafir
相关产品推荐
相关产品推荐

