重くなっている、まさにいま
-
processlist/pg_stat_activityを実行時間の長い順に見たか - 長く走っているクエリが実際にあったか(なければDB以外を疑う)
- そのクエリが
SELECTか、書き込み系かを確認したか - 止めるIDと、そのクエリ本文を突き合わせて確認したか
-
KILL QUERY/pg_cancel_backendから試したか(いきなり接続を切っていないか) - 止めた内容と時刻をメモに残したか
- 関係者に一報を入れたか(原因調査中である旨を含めて)
落ち着いたら
- スロークエリログ(
slow_query_log/log_min_duration_statement)を有効にしたか - しきい値をまず1秒にしたか
- ログの出力先とディスク残量、ローテーションを確認したか
- 設定ファイルにも書いて、再起動後も残るようにしたか
- 合計実行時間の長い順に並べて、上位を見たか
- 犯人クエリを
EXPLAINで確認したか(全件走査・読む行数・並べ替え) - いつから遅くなったかを、変更履歴やデータ量の推移と突き合わせたか
直すとき
- 呼ぶ回数・取る量を減らせないか、先に検討したか
- 時間帯をずらすだけで済まないか検討したか
- インデックス追加は検証環境で所要時間を測ったか
- 本番反映の手順(バックアップ・切り戻し)を用意したか
- 変更管理台帳に記録したか
- 暫定対応で終えた場合、恒久対応の予定を残したか
次に備える
- スロークエリログを定期的に見る日を決めたか(週1回など)
- 応答時間の監視やアラートのしきい値を見直したか
- 今回の内容をポストモーテムとして1枚残したか
「重くなっている、まさにいま」の最初の2つができれば、その日は乗り切れます。残りに○が付かない日があっても大丈夫です。
この内容は記事「急に重くなったDB|スロークエリの特定と一次対処の順番」のチェックリストです。印刷してそのままお使いいただけます。 / 無料ツール一覧へ