1

サーバーで mysql スロー クエリを有効にして、5 秒以上かかるクエリをログに記録しました。mysql> から同じクエリを実行すると、10 秒を超えると報告されたクエリは 1 秒未満しかかかりませんでした。何故ですか?

TIA、-ピーター

4

1 に答える 1

1

キャッシングが原因の可能性が高いです。

データベースは、ほとんどのデータをディスクに残しながら、一部のデータをメモリにキャッシュします。データがSQLクエリによってフェッチされると、そのデータがロードされ、近い将来に再度要求された場合に備えてメモリに保持されます。最終的に、そのデータが再度要求されない場合、後のクエリからキャッシュに入ってくる新しいデータによってキャッシュ内で上書きされます。

一部のシステムでは、ハードディスク自体に追加のキャッシュがあります。ディスクから一度フェッチされたデータは、ディスク コントローラによってキャッシュに保持される場合があります。これは、最近ディスクからフェッチされたデータが再度フェッチされる可能性が高いためです。

そのため、データがクエリ プロンプトから要求されると、データはキャッシュされます (場合によっては、ディスク コントローラーとデータベース自体によって)。

あなたのアプリケーションでは、新しいユーザーがさまざまな時間に参加し、独自のデータにアクセスするため (到着前にキャッシュされる可能性は低い)、これが発生する可能性は低くなります。

データベースを高速化する最も一般的な方法の 1 つは、サーバーが使用できるメモリの量を増やして、より多くのデータをキャッシュできるようにすることです。

詳細については、MySQL Query Cache に関する MySQL のドキュメントを参照してください。

于 2012-05-09T16:31:02.493 に答える