サーバーのパラメーターのチューニングをしたら次にする事といえば、遅いクエリーを特定して、クエリ-のチューニングをする事なので、pgfouineというプログラムを使用して、ログに書き出されたスローログを解析する方法を紹介します。設定は、CentOS6上で行いましたが、ほかの環境でも同じように設定をすることができると思います。
■ syslogの設定の変更
syslogに出力したログに対して、ログの解析を行うことを前提としているので下記のように、「/var/log/postgres」ファイルのみにlocal0ファシリティの内容が書き込まれるようにsyslogの設定を変更する。
# vi /etc/rsyslog.conf
*.info;mail.none;authprive.none;cron.none;local0.none /var/log/messages
local0.* /var/log/postgres
設定を変更したら、設定を反映するためにsyslogの再起動をする(確かリロードでも大丈夫だったような気がするが)
# service rsyslog restart
■ PostgreSQLの設定の変更
syslogで設定した、ファシリティに対してログが出力するための設定とpgfouineで解析できるようにするためにログのフォーマットを変更する
# vi /var/lib/pgsql/data/postgresq.conf
log_line_prefix = ‘user=%u, db=%d ‘
log_destination = ‘syslog’
syslog_facility = ‘LOCAL0’
設定を変更したら、設定を反映するために、PostgreSQLを再起動する(確かリロードでも大丈夫だったような気がするが)
# service postgresql restart
■ pgfouineのセットアップ
CentOSでは、pgfouineは、EPELレポジトリから簡単に導入することができる。もしくは公式サイトのRPMパッケージなどを使用してセットアップする。
# yum install pgfouine
■ PHPのセットアップ
pgfouineの実行にPHPが必要なのでPHPがセットアップされていなかったら下記のパッケージを導入する。
# yum install php-cli php-common pg-gd
■ pgfouineでログの解析
下記のようなコマンドでログファイルを解析することで、上位50番までのスローログの解析結果をHTMLファイルに出力することができる。
/usr/bin/pgfouine.php -file ログファイル名 -top 50 -logtype syslog -format html-with-graphs -report Analize-Slow-Query.html=overall,hourly,bytype,slowest,no-mosttime,n-mostfrequent,n-slowestaverage,n-mostfrequenterrors