2011-01-14 8 views
0

Webアプリケーションで非常に遅いMySQLクエリが見つかりました。再起動時に不思議なMySQLキャッシュのケース

mysql> show variables like 'query%'; 
+------------------------------+---------+ 
| Variable_name    | Value | 
+------------------------------+---------+ 
| query_alloc_block_size  | 8192 | 
| query_cache_limit   | 1048576 | 
| query_cache_min_res_unit  | 4096 | 
| query_cache_size    | 0  | 
| query_cache_type    | ON  | 
| query_cache_wlock_invalidate | OFF  | 
| query_prealloc_size   | 8192 | 
+------------------------------+---------+ 

でも奇妙なことは、この高速化が解消されないということです:奇妙なことは、クエリのみquery_cacheがそうのように、デフォルト(query_cache_size 0)に設定されているという事実にもかかわらず、それが実行されます最初の時間を遅くしていることですMySQLサーバが停止して再起動した後でも(私はOSXを使用しており、システム環境設定ペインを使用してこの再起動を実行します。)最初のクエリのパフォーマンスを低下させる唯一の方法は、システムをリブートすることです。

私の質問です:どのようにこれが起こっているのですか?明らかに、仕事中のキャッシュのいくつかの並べ替え、しかしどこですか?そして、それはデータベースの再起動の間、どのように持続しますか?このクエリはPHP/Apache経由で提供されている私たちのWebアプリケーションを介して処理されますが、特別な鐘や笛はありません。また、好奇心を抱くキャッシュはApacheの再起動後も持続します。

ヘルプ?

答えて

2

野生の推測であるファイルをキャッシュするオペレーティングシステム、またはハードディスク、

+0

私はOSのバッファキャッシュは野生の推測ではないでしょうね。代わりに、それは正しい可能性が高いです。 HDDのキャッシュは、通常かなり小さいです。 – derobert

+0

これが当てはまる場合、私は、システムのエクササイズ中に長時間待っていると思っていました.OSはすべてを永遠にキャッシュすることはできません。さらに、さまざまな種類のクエリがすべて同じテーブルを使用しており、レコードが非連続的なので、OSがテーブル内の特定のレコードをどのようにキャッシュするかはわからないため、セクタを吸い込んでそれで終わった。あなたが間違っていると言っているわけではありませんが、あなたが正しいなら私は非常に感銘を受けます:OSキャッシングは魔法に近づいています。 – shanusmagnus

関連する問題