包含式节点时间不能相加
先区分循环平均数、父节点包含的工作与并行重叠,再理解记录的计划指标和客户端等待时间。
数据库测量与客户端等待是不同区间
原作者的 Seq Scan 约349毫秒、Execution 约463毫秒,却在 pgAdmin 和 JDBC 观察到30或45秒。作者评论说明连接在本机,这仍没有消除结果传输和客户端处理的工作。
执行计划可以帮助检查数据库实际做了什么,但不能仅凭这个差距宣称数据库已经无需优化。客户端区间和数据库区间需要分别测量。
循环平均乘积保留数值,并不创造总时间
一个节点平均每循环2.5毫秒、执行4次,可以报告跨循环10毫秒。然而父节点可能已经包含这项工作,并行参与者也可能同时运行。将这10毫秒再与父节点或同层 Workers 相加会重复计算或误解重叠。
保留原始数值 token 使0.010与0.01的来源写法可核对;乘积按十进制字符串表达,报告不把精度问题隐藏在二进制浮点乘法里。
比较规则必须能被复核
对比仅按语句/子节点位置配对。同位置算子名变化标记 operator-changed;即使重排后同位置名称相同,也只报告 same-operator-at-position,不推断节点身份或优化成功。
完整 statement、未知扩展、Workers、JIT 与 triggers 留在交付件中,方便使用真实 PostgreSQL 工具继续分析。报告解释记录的口径,不替代服务端测量或接收应用验证。
明确来源与完整交付
主计划与可选对照计划各自选择粘贴或一个 JSON 文件;只有显式启用的角色和模式会读取。文件同名不会改变角色。显式版本仅支持 PostgreSQL 16。
主计划与对照的原始 UTF-8 字节合计不超过 1 MiB;单个文件名最多 512 UTF-8 字节,MIME 标签最多 128。容量与元数据在读取文件前核对;原始字节、角色、文件名、字节数及 SHA256 全部保留。
TEXT 计划需要在 PostgreSQL 16 另行导出 FORMAT JSON;本工具不执行 SQL、不连接数据库,也不能据此确认优化成功或解释全部客户端等待时间。历史问题的 2015 TEXT 测量只作为需求背景;界面样例使用已保存的受控 PostgreSQL 16.15 JSON 导出。
10 秒完整绝对期限从元数据、参数验证和文件读取之前开始,贯穿 Worker 加载、处理和发布。取消、超时或源变更清除旧报告、表格与下载;保留同一份完整源可重新运行。
完整报告、CSV、原始计划、版本封装及复制正文合计最多 16 MiB;大型序列化前预留容量,typed 报告/表格另限 16 MiB,物理与 typed 数据运输合计限 32 MiB,数字路径累计限 8 MiB。超限原子拒绝。
| 文件 | 用途 |
|---|---|
| report.json | 全部计划树、数值词法、范围、对比和源证据 |
| operators.csv | 每个算子及完整 sourceJSON;公式前缀安全引用 |
| plan-1-source.json / plan-2-source.json | 主计划及启用对照的逐字节原件 |
| envelope.json | 显式版本 16 包装;原始数组文本原样嵌入 |
| Copy | 完整报告,预览截断不改变正文 |
- 两个角色分别切换粘贴/文件,关闭对照会忽略残留对照输入。
- 用完整原件复核每个树节点、Workers、JIT、触发器与扩展字段。
- 取消或源变更后,旧结果及链接清除;用同一完整请求恢复。
参考资料
本分类工具使用说明
展开工具,查看操作步骤、可调选项和支持范围,再直接进入工作区。
PostgreSQL 16 JSON 计划检查读取一至两份 PostgreSQL 16 JSON 执行计划,保留原始树、Workers 与数值写法,解释循环和并行口径并按位置比较。
读取一至两份 PostgreSQL 16 JSON 执行计划,保留原始树、Workers 与数值写法,解释循环和并行口径并按位置比较。
操作步骤
- 确认原始导出来自 PostgreSQL 16,并保留 JSON 数组。
- 给主计划选择粘贴或文件;可选启用对照并独立选择来源。
- 阅读完整树、数值词法、循环与并行范围以及位置对比。
- 下载原始计划、版本封装、完整报告与 CSV;复制保留完整正文。
可调选项
- 服务器主版本
- PostgreSQL 16
- 主计划来源
- 粘贴 · 文件
- 启用对照计划
- 默认关闭
- 对照计划来源
- 粘贴 · 文件
能力与限制
- 主计划与对照的原始 UTF-8 字节合计不超过 1 MiB;单个文件名最多 512 UTF-8 字节,MIME 标签最多 128。容量与元数据在读取文件前核对;原始字节、角色、文件名、字节数及 SHA256 全部保留。
- 每份计划 1–32 个 statement、最多 2048 个 operator,operator 深度最多 32,每份最多 256 个 Workers 记录。版本封装与全部源计划合计最多 100000 个 JSON 值节点,封装根深度为 0、最多 128;单个源数组根在封装深度 2。
- 仅接收 EXPLAIN FORMAT JSON 数组,不解析文本计划、不执行 SQL。数值必须有限、非负、可无损表示;重复键、BOM、负零及不安全整数拒绝。
- operator 节点的 Actual Startup Time、Actual Total Time、Actual Rows、Actual Loops 如出现,必须四者齐全;用于循环乘积的时间、行数与 loops 须用普通十进制写法,指数写法拒绝。Workers 的原始字段保留并检查已提供数值。TIMING OFF 等缺少实际时间的部分 Actual 记录当前拒绝。
- cost 是规划器单位;Actual 时间和行数按循环平均。报告用精确十进制字符串乘 loops,时间包含子节点并可能有并行重叠,不求相加总时间;buffers 不乘 loops。
- 两份计划只按相同 statement 和子节点位置比较,标记新增、删除和 operator 改变;不推断节点身份或优化成功。完整所有文件与复制文本合计最多 16 MiB。
- 主计划与可选对照计划各自选择粘贴或一个 JSON 文件;只有显式启用的角色和模式会读取。文件同名不会改变角色。显式版本仅支持 PostgreSQL 16。
- TEXT 计划需要在 PostgreSQL 16 另行导出 FORMAT JSON;本工具不执行 SQL、不连接数据库,也不能据此确认优化成功或解释全部客户端等待时间。历史问题的 2015 TEXT 测量只作为需求背景;界面样例使用已保存的受控 PostgreSQL 16.15 JSON 导出。
- 10 秒完整绝对期限从元数据、参数验证和文件读取之前开始,贯穿 Worker 加载、处理和发布。取消、超时或源变更清除旧报告、表格与下载;保留同一份完整源可重新运行。
- 完整报告、CSV、原始计划、版本封装及复制正文合计最多 16 MiB;大型序列化前预留容量,typed 报告/表格另限 16 MiB,物理与 typed 数据运输合计限 32 MiB,数字路径累计限 8 MiB。超限原子拒绝。