最後の「log_min_duration_statement」では、SQLの実行に指定した*ミリ秒以上の時間がかかった場合に、そのSQLと所要時間をログファイルに記録します。
初期値は、「-1(SQLおよびその所要時間の記録をしない)」に設定されています。このパラメータに、システム上許容できないレスポンス時間を設定しておくことで、ログファイルから、遅延が発生した「スロークエリ」を把握できるようになります。
# su - <PostgreSQLをインストールしたOSユーザー名>
$ pg_ctl reload
> pg_ctl reload
log_min_duration_statementの値を「10000」と設定し、10秒以上かかるSQLを実行した際に出力されたログファイルの内容を示します(例3)。
[2015-08-30 21:28:20 JST] 2727[6]LOG: parameter "log_min_duration_statement" changed to "10000" [2015-08-30 21:29:26 JST]testuser postgres 17060[1]LOG: duration: 63122.171 ms statement: select * from pgbench_accounts where aid>5000; <--
このように、ログファイルからスロークエリを確認できるようになります。
この情報は、「スロークエリで参照するテーブルの統計情報が最新であるか」や「EXPLAIN ANALYZE <スロークエリ>コマンドを使用して適切な実行計画で処理が行われているか」など、ボトルネックの改善対処に役立つでしょう。
今回は、PostgreSQLの障害発生に備えて設定しておくべきパラメータとして、「logging_collector」「log_line_prefix」「log_min_duration_statement」を紹介しました。これらを設定しておくことで、障害発生時の状況把握や問題解決がスムーズになります。ぜひこれを機に設定の有無を確認してください。
なお、今回紹介したパラメータ以外にもPostgreSQLの状況把握に役立つログ関連パラメータは複数存在します。興味のある方はPostgreSQLマニュアル 「エラー報告とログ取得」の章も併せて参照するようにしてください。
(*1 参考リンク)PostgreSQLマニュアル 「エラー報告とログ取得」
2007年アシスト入社。オラクル製品やPostgreSQL/EDB Postgres製品のサポートに従事。最前線のサポート対応で得た知識や知見を元に、顧客が困ることの多い問題/課題や各製品の新機能に関する検証結果に関する情報発信も行っている
Copyright © ITmedia, Inc. All Rights Reserved.