PostgreSQLのスロークエリログを出してみた話

f:id:h_miz3754:20220406182532j:plain

これはアソビュー !Advent Calendar 2021の15日目の記事です🎄

こんにちは、アソビュー!SREチームの三森です。
寒い日が続きますが、皆さんいかがお過ごしでしょうか?

先月受診した健康診断で肥満気味だと発覚したため、食生活の改善を行なっています。3食バランスのとれた食事と適度な運動を実践するのは、なかなか容易ではありません。とりあえず、間食を食べることからやめてみようと思います。

 

Aurora PostgreSQLではデフォルトでクエリの失敗、ログインエラー、致命的なサーバーエラー、デッドロックが出力されています。

今回はAurora PostgreSQLでスロークエリを出力する設定について話します。

内容

Aurora PostgreSQLのパラメータグループで特定のパラメータを変更します。なお、パラメータグループはDBクラスターパラメータグループとDBパラメータグループの2種類がありますが、今回はDBクラスターパラメータグループに変更を加えています。

DBクラスターパラメータとDBパラメータについては以下を引用させてもらいます。

 

DB パラメータグループは、1 つ以上の DB インスタンスに適用されるエンジン設定値のコンテナとして機能します。(略)

DB クラスターパラメータグループは、Aurora DB クラスター内のすべての DB インスタンスに適用されるエンジン設定値のコンテナとして機能します。

 

docs.aws.amazon.com

スロークエリログを出力するためのパラメータは下記です。

なお、下記は全て動的パラメータなので変更後のクラスター再起動は発生しません。

 

log_min_duration_statement=1000(ms)

スロークエリとみなす閾値。0に設定すれば、すべてのクエリの実行時間と実行されたクエリが出力され、 -1(デフォルト)は、実行時間の記録を無効にします。例えば、1000msに設定すると、実行に1000msもしくはそれ以上かかったクエリをログに出力します。

上記のパラメータの設定により、閾値を超えたクエリがログが出力されるようになるので、基本的な運用は問題ないと思います。

もしくは下記2つの設定を変更することで、同様の状態にすることができます。

 

log_statement

どの種類(データ定義文、データ変更文など)のSQL文をログに吐き出すかを設定します。有効な値は、none、ddl、mod、およびallです。デフォルトはnoneです。

 

log_duration

これをonにすることで、実行された全てのSQLの経過時間を出力します。 デフォルトはoffです。

 

さらにエラーログを充実させたい場合は、下記のパラメータを設定することもオススメです。

 

log_error_verbosity=verbose

ログ取得されるそれぞれのメッセージに対し、サーバログに書き込まれる詳細の量を制御します。有効な値は、TERSE、DEFAULT、およびVERBOSEで、それぞれ表示するメッセージのフィールドが追加されていきます。

また、log_destinationをcsvlogとしている且つ、このパラメータをverboseの場合はログにPostgreSQLソースコード上のエラー発生場所が記録されます。

 

log_min_error_statement=error

単純な構文エラーをログに出力させます。

より詳細な情報については下記が参考になるかと思います。

www.postgresql.jp

まとめ

これでスロークエリログは出るようになります。調査などにお役になれば嬉しいです。

 

さいごに

アソビュー!では一緒に働くメンバーを募集しています。
興味がありましたら、まずはざっくばらんにお話しだけでも聞きに来て頂けたら嬉しいです。ご応募をお待ちしております。

www.wantedly.com