■お問い合わせプロダクトバージョン
PostgreSQL 9.2.18
■問い合わせ
DBのCPU使用率が3%から60%まで急激に上がり、その後元に戻るといった事象が発生しました。
原因の調査をお願いします。
■回答
ご質問いただいているCPU使用率の増加は、一時的なDBの業務量の増加に伴うものであった可能性が考えられます。
ご提供いただいたログ等を確認したところ、CPU使用率が上昇していた期間において、DBに対して定常時の数倍の接続数があったことが確認できました。
該当の時間帯で業務量に変化がなかったかご確認ください。
また、事象が発生した時間帯で10分程度開いたままのトランザクションをもつプロセス(PID:36984)が見つかりました。このトランザクション内でレコードに変更が行われていた場合、他のトランザクションからの可視性判断が発生するため、各バックエンドプロセスのCPU使用率が上昇する可能性があります。COMMIT/ROLLBACKの漏れが無いか業務APを確認することをお勧めします。
※CPUの上昇に関しては、クエリの実行計画の変動によって発生することもありますが、今回の事象についてはクエリの実行計画の変動による影響の可能性は低いと考えます。
クエリの処理時間が log_min_duration_statement の設定値を超えたことを示すメッセージが出力されていましたが、これらのクエリにはヒント句が使用されているため、定常時よりこれらのクエリが遅延している場合はCPUリソースの枯渇によって遅延が発生した可能性が考えられます。
ご提供いただいた情報から以下の状況を確認できました。
・バックエンド数(DBへの接続数)増加
DBサーバのpsログからバックエンドプロセスを確認したところ、事象発生前はトータル99接続でしたが、CPU使用率が高騰していた時間帯では、233プロセスに増加していました。
事象発生時間帯の接続数の遷移は以下のとおりです。
t
2
2
2
2
2