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;

ウェブアプリケーションの場合は、単位時間あたり(総実行時間)/(発行回数)が大きいものを見たいので、上記から少々替えないといけない。あとでやろう。