pg_stat_statements の使い方

重い SQL を探す

書き方

ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';(再起動が要る)
CREATE EXTENSION pg_stat_statements;
SELECT query, calls, total_exec_time, mean_exec_time FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 5;
SELECT pg_stat_statements_reset();

SQL の形(値は $1 に置き換えたもの)ごとに、回数(calls)・合計の時間(total_exec_time)・1 回の平均(mean_exec_time)・読んだブロックなどを集めます。サーバーの起動時に読み込む必要があり(shared_preload_libraries)、データベースに CREATE EXTENSION します。total_exec_time の大きいものから直すと、効き目が大きくなります。

例

SELECT query, calls, round(mean_exec_time::numeric, 2) FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 3;

実際に打って練習する

PostgreSQL DBA コースの Lv47「重い SQL を探す pg_stat_statements」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

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

PostgreSQL の管理コマンド一覧(DBA)へ戻る