auto_explain の使い方

遅かった SQL の実行計画をログに残す

書き方

LOAD 'auto_explain';(この接続だけ)
SET auto_explain.log_min_duration = '100ms';
SET auto_explain.log_analyze = on;
ALTER SYSTEM SET shared_preload_libraries = 'auto_explain';(すべての接続。再起動が要る)

log_min_duration より長くかかった SQL の実行計画を、サーバーのログに書きます(duration: … ms plan: の次の行から Query Text: と計画)。後から EXPLAIN すると速いのに、本番では遅かった、というときに、そのときの計画が分かります。LOAD はその接続だけで効くので、アプリの接続にも効かせるには shared_preload_libraries に入れて再起動し、auto_explain.log_min_duration を ALTER SYSTEM で決めて読み直します。log_analyze = on にすると actual の行数も出ますが、すべての文で時間を測るので重くなります。

例

LOAD 'auto_explain';
SET auto_explain.log_min_duration = 0;
\! grep -A 3 'plan:' log/postgresql.log

実際に打って練習する

障害対応(PostgreSQL)コースの Lv22「計画をカルテに auto_explain」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、プラチナ以上のプランで遊べます。

PostgreSQL の障害対応で使う構文一覧へ戻る