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はノードごとの共有ブロックの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'が多い場合は可視性マップが古く、'Workers Planned' > 'Workers Launched'の場合はワーカープールが枯渇している。計時のオーバーヘッドが大きい場合はTIMING OFFを使用する。COSTS OFFはJITセクションも非表示にする。

DBAtlas で開く →

関連項目