PostgreSQL EXPLAIN 可视化工具
将 EXPLAIN ANALYZE JSON 转为易读的计划树,附带耗时、估算和缓冲区信息
输入
粘贴 EXPLAIN (FORMAT JSON) 的输出。也支持带 QUERY PLAN 表头和 + 续行标记的 psql 输出。
最大 5 MB,在浏览器中分析,绝不保存。
摘要
运行下面的命令,把 JSON 结果粘贴到左侧,或加载一个示例。
推荐命令
EXPLAIN ( ANALYZE, BUFFERS, SETTINGS, WAL, VERBOSE, FORMAT JSON ) SELECT ...;
ANALYZE 会真正执行语句。请用 BEGIN 和 ROLLBACK 包裹 INSERT、UPDATE 或 DELETE。
执行计划
等待 EXPLAIN 执行计划。
显示内容
PostgreSQL EXPLAIN Visualizer 将 EXPLAIN (FORMAT JSON) 输出转换为可折叠的计划树、可排序的节点表和格式化的原始 JSON。摘要显示执行时间与规划时间、节点数、最慢节点、最大的行数估算偏差以及从共享缓冲区之外读取的块数。选择任意节点即可查看 PostgreSQL 报告的全部字段。
如何采集执行计划
运行 EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL, VERBOSE, FORMAT JSON) 加上你的查询,然后粘贴结果。带 QUERY PLAN 表头、+ 续行标记和行数页脚的 psql 输出会被自动清理。ANALYZE 会执行语句,因此请用 BEGIN 和 ROLLBACK 包裹 INSERT、UPDATE 和 DELETE。未使用 ANALYZE 的计划仍会显示成本和估算,但会跳过基于时间的发现。
指标如何计算
总耗时等于每次循环的实际时间乘以循环次数;在 Gather 节点之下会除以进程数,避免重复计算并行工作。自身耗时减去子节点的总耗时并不低于零,因此在并行计划、CTE、InitPlan 和 SubPlan 中是近似值。估算倍数比较每次循环的实际行数与估算行数。EXPLAIN 中的缓冲区计数包含子节点,因此自身值已扣除子节点。块大小按默认的 8 kB 计算。
发现及其局限
发现是基于计划数字的观察:较大的行数估算偏差、内侧执行次数很多的 Nested Loop、丢弃大部分行的顺序扫描、溢出到磁盘的排序和哈希、临时文件、来自共享缓冲区之外的读取,以及占据大部分执行时间的节点。建议都很审慎,从不点名要创建的具体索引,因为仅凭执行计划无法看出查询频率、写入负载或数据分布。
隐私
执行计划可能暴露表名、模式名、谓词和字面值。计划在你的浏览器中解析,大型计划在 Web Worker 中处理,绝不会上传、记录或保存。只会记住所选的视图(树、表格或原始)。
