0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLで性能問題が発生したが、ログがなく原因を特定できなかった話

0
Posted at

PostgreSQLの性能問題を調査した時の話です。

開発環境、テスト環境、本番環境の構築時に、log_min_duration_statement
の設定値がやや大きいことが気になり、値を小さくすることを提案しました。

しかし、レビューで「変更しない方が良い」という判断となり、
そのままリリースされました。

その後、本番環境で性能問題が発生しました。
調査を依頼されましたが、対象時間帯の遅延SQLがログに残っておらず、
原因を特定できませんでした。

もしログが残っていれば、次のような情報を確認できた可能性があります。
・どのSQLの実行に時間がかかっていたのか
・SQLの実行にどの程度の時間がかかっていたのか
・どのSQLが遅延していたのか、あるいは複数のSQLで遅延が発生していたのか

しかし、ログがなかったため、次のような原因を推測することしかできませんでした。
・統計情報の問題だったのか
・インデックスの問題だったのか
・特定SQLの実行回数が急増したのか

log_min_duration_statementとは

PostgreSQLには log_min_duration_statement というパラメータがあります。
指定した実行時間以上かかったSQLをログに出力するための設定です。
例えば、900msに設定すると、実行時間が900ms以上のSQLがログに出力されます。

ただし、値を小さくし過ぎるとログ量が増加します。
一方で、値を大きくし過ぎると、性能問題発生時に
必要な情報を取得できない可能性があります。

そのため、環境や運用ルールに応じた設定が必要です。

まとめ

今回の経験から、
「ログは出過ぎても困るが、出なさ過ぎると原因調査が難しくなる」
ということを強く実感しました。

性能問題はいつ発生するか分かりません。

PostgreSQLを運用する場合は、ログの出力量や記録されているSQLの実行時間を定期的に
確認し、log_min_duration_statement の設定値が適切かどうかを見直すことが重要です。

補足(より深く学びたい方へ)

PostgreSQLの性能調査を体系的に学びたい方は
今回のような「不要なインデックスの見極め」を含め、
実務で役立つ性能分析・チューニングの進め方を講座で体系的に解説しています。

※現在Udemyセール中のため、通常より安く受講できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?