最近、サーバーの1つでメモリが不足し、クラッシュしました。 munin
グラフを確認したところ、クラッシュの直前にピークに達した唯一のメトリック(メモリ使用量以外)はMySQL throughput
であったようです。ただし、対応するMySQL queries
の数の増加が見られると予想していましたが、これは発生しませんでした。
また、下のグラフから、MySQL throughput
が異常に高い値に達しており、以前に到達した他の値にはほど遠いことがわかります。
私たちはどのように進めるべきかについて完全に暗闇にいるので、以下の質問があります:
MySQLスループットの増加の「事後」調査を実行する方法は?
膨大な結果セットを持つクエリは、クエリの量の対応する増加を見ることなく、そのようなスパイクを引き起こします。ディスクI/Oモニタリングはありますか?これがクエリによって引き起こされた場合は、その中にも大きなスパイクがあるはずです。
残念ながら、general_log
を有効にしないと死後検査は困難です。エラーログには、正常に実行されたクエリは表示されません。
今後、これらの問題を解決するために私が行ったことは、クエリログのウィンドウを保持することです。 general_log
を有効にし、logrotateを設定して、クエリの簡単な履歴を保持します。パフォーマンスが高すぎる場合は、mk-query-digestなどのツールをtcpdumpと一緒に使用してクエリをキャプチャすることもできます。