PostgreSQL8.4でボトルネックSQLクエリを探す

MySQLだとスロークエリのログを出してスクリプトを走らせる形でしたが、
こちらは便利なものがありました。

postgresの設定ファイル(data/postgresql.conf)を変更します。

shared_preload_libraries = 'pg_stat_statements'
custom_variable_classes = 'pg_stat_statements'

pg_stat_statements.max = 4000
pg_stat_statements.track = 'top'
track_activity_query_size = 2048

postgresを立ち上げ目的のDBに対して以下のSQLを実行します。

psql -U postgres -d {db} -f share/contrib/pg_stat_statements.sql

アプリケーションをいじったあとに以下のSQLでボトルネックを表示できます。

SELECT query, calls, total_time, rows FROM pg_stat_statements ORDER BY total_time DESC LIMIT 3;

一旦収集データを消すには以下です。

SELECT pg_stat_statements_reset();