PostgreSQLのpg_stats_statementを有効化する
ウェブアプリケーションでPostgreSQLの性能が怪しいところがあり、統計を取るためにpg_stats_statementを有効にしてみました。
postgres.confでpg_stat_statementのライブラリを読み込む
以下の設定を入れます。
shared_preload_libraries = 'pg_stat_statements' # (change requires restart)
コメントにも書いてあるとおり、変更したらpostgreSQLを再起動する。
extensionを有効にする
統計を取りたいDBに接続して以下コマンドを実行。
$ psql hogehoge hogehoge=# CREATE EXTENSION pg_stat_statements;
あとはpg_stat_statementsからデータを読み込む。
例えばPostgreSQLのドキュメントに載っている以下のSQLでもっとも時間がかかっているSQLが判る。上位5つまででますね。
hogehoge=# SELECT query, calls, total_time, rows, 100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;
ウェブアプリケーションの場合は、単位時間あたり(総実行時間)/(発行回数)が大きいものを見たいので、上記から少々替えないといけない。あとでやろう。