MySQLサーバーでの遅いクエリの問題をデバッグしています。クエリは通常100〜400ミリ秒で完了しますが、場合によっては数十秒または数百秒に急上昇します。
クエリは、私が制御できないアプリケーションによって生成され、複数のデータベースがあります(顧客ごとに1つ)。遅いクエリはランダムに表示されるようで、遅いクエリがログに記録されると、RAM、ディスク、CPUのいずれもロードされません。クエリを手動で実行すると、(ミリ秒単位で)正常に実行されるため、他の読み取りおよび書き込みクエリと組み合わせたロックの問題が疑われます。クエリ自体はひどいです(WHERE句またはORDER BY句のいずれかでインデックスを使用できません)が、最大のテーブルは比較的小さく(最大200.000行)、JOINはほとんどありません。クエリのプロファイルを作成すると、ほとんどの時間が結果の並べ替えに費やされます(クエリが正常に実行される場合)。
テスト環境で極端な速度低下を再現することはできません。現時点での最善のアイデアは、本番MySQLサーバーを停止し、データベースのコピーを作成し、完全なクエリロギングを有効にして、サーバーを再起動することです。このようにして、ロードを再生して問題を再現できるはずです。ただし、一般的なクエリログには、クエリのターゲットデータベースではなく、クエリのみが記録されているようです。MySQL用の他の記録/再生オプションはありますか?