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」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
すべてのレベルが、プラチナ以上のプランで遊べます。