サーバーで mysql スロー クエリを有効にして、5 秒以上かかるクエリをログに記録しました。mysql> から同じクエリを実行すると、10 秒を超えると報告されたクエリは 1 秒未満しかかかりませんでした。何故ですか?
TIA、-ピーター
サーバーで mysql スロー クエリを有効にして、5 秒以上かかるクエリをログに記録しました。mysql> から同じクエリを実行すると、10 秒を超えると報告されたクエリは 1 秒未満しかかかりませんでした。何故ですか?
TIA、-ピーター
キャッシングが原因の可能性が高いです。
データベースは、ほとんどのデータをディスクに残しながら、一部のデータをメモリにキャッシュします。データがSQLクエリによってフェッチされると、そのデータがロードされ、近い将来に再度要求された場合に備えてメモリに保持されます。最終的に、そのデータが再度要求されない場合、後のクエリからキャッシュに入ってくる新しいデータによってキャッシュ内で上書きされます。
一部のシステムでは、ハードディスク自体に追加のキャッシュがあります。ディスクから一度フェッチされたデータは、ディスク コントローラによってキャッシュに保持される場合があります。これは、最近ディスクからフェッチされたデータが再度フェッチされる可能性が高いためです。
そのため、データがクエリ プロンプトから要求されると、データはキャッシュされます (場合によっては、ディスク コントローラーとデータベース自体によって)。
あなたのアプリケーションでは、新しいユーザーがさまざまな時間に参加し、独自のデータにアクセスするため (到着前にキャッシュされる可能性は低い)、これが発生する可能性は低くなります。
データベースを高速化する最も一般的な方法の 1 つは、サーバーが使用できるメモリの量を増やして、より多くのデータをキャッシュできるようにすることです。