DBAtlas · 数据库运维图谱

使用 EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL) 深入阅读计划

PostgreSQL性能

命令

-- ANALYZE really executes the statement: run DML inside a transaction and roll it back
BEGIN;
EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL, VERBOSE)
UPDATE customer SET balance = balance + 1 WHERE city = 'Ankara';
ROLLBACK;

-- For SELECT
EXPLAIN (ANALYZE, BUFFERS, SETTINGS)
SELECT name FROM customer ORDER BY name DESC LIMIT 10 OFFSET 1000;

作用

返回带真实执行统计信息的计划:BUFFERS 显示每个节点的 shared hit/read/dirtied 和临时块,SETTINGS 显示影响规划的非默认参数,WAL 显示生成的 WAL 记录数/字节数。

适用场景

用于分析估算行数与实际行数之间的差距、溢出到磁盘的排序/哈希(Sort Method: external merge、temp read/written)以及 DML 的 WAL 成本。

注意

ANALYZE 会真正执行语句;DML 务必在 BEGIN/ROLLBACK 中运行(触发器和序列递增仍会发生)。阅读提示:估算 'rows' 与 'actual rows' 相差 10 倍或以上,说明存在统计信息问题;对于循环内的节点,时间和行数是每次循环的值,乘以 loops 才是总量;Index Only Scan 上 'Heap Fetches' 较高表示 visibility map 过时,'Workers Planned' > 'Workers Launched' 表示 worker 池已耗尽。计时开销较高时使用 TIMING OFF;COSTS OFF 还会隐藏 JIT 部分。

在 DBAtlas 中打开 →

相关内容