最近、これまで見たことのない問題が発生しました。約 3 時間、Mysql テーブルの 1 つが非常に遅くなりました。このテーブルはフォーラムの投稿を保持し、現在約 100 万行あります。遅くなったクエリは、私たちのアプリケーションで非常に一般的なものでした:
SELECT * FROM `posts` WHERE (`posts`.forum_id = 1) ORDER BY posts.created_at DESC LIMIT 1;
(forum_id、created_at)のpostsテーブルにインデックスがあり、通常、このクエリとソートをメモリ内で実行できます。しかし、この 3 時間はそれほどでもありません。通常、この時間内に 2 秒から 45 秒かかる瞬間的なクエリです。その後、正常に戻りました。
スロー クエリ ログに目を通しましたが、他に異常は見られません。私は New Relic (これは Rails アプリです) を調べましたが、他のすべてのアクションは基本的に通常と同じ速度で実行されました。今日は異常な数のメッセージ投稿はありませんでした。ログには他に奇妙なものは見つかりません。また、使用可能なメモリがまだギグある場合、データベースはスワッピングしていませんでした。
Mysql が特定のクエリに使用するインデックスについて考えを前後に変更できるかどうか疑問に思っています。なんらかの理由で、今日数時間、このクエリで完全なテーブル スキャンを実行することを決定し始めましたか? しかし、それが本当なら、なぜテーブル全体のスキャンを停止したのでしょうか?
他の誰かが理由に反する断続的に遅いクエリに遭遇しましたか? または、このような問題をデバッグする方法について何か独創的なアイデアはありますか?