MySQL 構成のクエリ キャッシュ タイプの設定を確認します。
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_query_cache_type
0 または 2 に設定すると、クエリをキャッシュしないか、キャッシュするように特に要求したクエリのみをキャッシュします。つまり、Magento は、キャッシュされたクエリ結果を明示的に要求する必要があります (そうするかどうかはわかりません)。1 に設定すると、クエリ キャッシュを明示的に要求しないクエリを除くすべてのクエリがキャッシュされます。
テーブル キャッシュは、開いている可能性のあるファイル ポインターを参照します。かなり早く消費される可能性があり、必要に応じて未使用のエントリをロールオフします。MySQLのドキュメントから:
table_cache および max_connections システム変数は、サーバーが開いたままにしておくファイルの最大数に影響します。これらの値のいずれかまたは両方を増やすと、プロセスごとに開いているファイル記述子の数に対してオペレーティング システムによって課せられた制限に達する可能性があります。多くのオペレーティング システムでは、開いているファイルの制限を増やすことができますが、その方法はシステムによって大きく異なります。オペレーティング システムのマニュアルを参照して、制限を増やすことができるかどうか、およびその方法を判断してください。
table_cache は max_connections に関連しています。たとえば、200 の同時実行接続の場合、少なくとも 200 * N のテーブル キャッシュ サイズが必要です。ここで、N は、実行するクエリの結合ごとのテーブルの最大数です。また、一時テーブルとファイル用にいくつかの追加のファイル記述子を予約する必要があります。
オペレーティング システムが、table_cache 設定によって示されるオープン ファイル記述子の数を処理できることを確認してください。table_cache の設定が高すぎると、MySQL はファイル記述子を使い果たし、接続を拒否し、クエリの実行に失敗し、信頼性が非常に低くなる可能性があります。また、MyISAM ストレージ エンジンでは、開いている一意のテーブルごとに 2 つのファイル記述子が必要であることも考慮する必要があります。--open-files-limit 起動オプションを mysqld に使用して、MySQL で使用可能なファイル記述子の数を増やすことができます。セクションC.5.2.18「'File' Not Found および同様のエラー」を参照してください。
開いているテーブルのキャッシュは、table_cache エントリのレベルで保持されます。デフォルト値は 64 です。これは、mysqld の --table_cache オプションで変更できます。MySQL はクエリを実行するために一時的にこれよりも多くのテーブルを開く場合があることに注意してください。
次の状況では、MySQL は未使用のテーブルを閉じ、テーブル キャッシュから削除します。
キャッシュがいっぱいで、スレッドがキャッシュにないテーブルを開こうとした場合。
キャッシュに table_cache より多くのエントリが含まれており、キャッシュ内のテーブルがどのスレッドにも使用されていない場合。
テーブルのフラッシュ操作が発生したとき。これは、誰かが FLUSH TABLES ステートメントを発行するか、mysqladmin flush-tables または mysqladmin refresh コマンドを実行したときに発生します。
テーブル キャッシュがいっぱいになると、サーバーは次の手順を使用して、使用するキャッシュ エントリを見つけます。
現在使用されていないテーブルは、使用頻度の低いテーブルから順に解放されます。
新しいテーブルを開く必要があるが、キャッシュがいっぱいでテーブルを解放できない場合、キャッシュは必要に応じて一時的に拡張されます。キャッシュが一時的に拡張された状態で、テーブルが使用された状態から使用されていない状態になると、テーブルは閉じられ、キャッシュから解放されます。