Fatal Error: Unexpected BLOG

主に自分用の備忘録として

【MySQL】キャッシュされたクエリは、クエリキャッシュメモリが小さいためキャッシュから削除されます。

とある処理があまりに時間かかっているので、phpMyAdminの「アドバイザ」を見てみたら、以下の様なアドバイスを頂きました。

    事象:
キャッシュされたクエリは、クエリキャッシュメモリが小さいためキャッシュから削除されます。

推奨設定:
query_cache_size を増やす必要があるでしょう。しかしながら、大きくなった分だけ、キャッシュ維持に対するオーバヘッドも増加したように感じるかもしれません。少しずつ増やして、結果をモニタするようにしてみてください。

判断理由:
追加クエリに対する削除クエリの割合は、91.4% です。この値は低いほど良いです (ここでは 0.1% を超えたらで判断しています)。
判断値の算出方法:
Qcache_lowmem_prunes / Qcache_inserts * 100

判断基準:
value > 0.1

まあ、query_cache_sizeが小さすぎますよという事なんでしょうけど、気になったのは「判断理由」。
「0.1%」という閾値のものが、現状で「91.4%」。どう考えても異常値。ヤダ怖い・・・。

ということで、「91.4%」の正体を探る。

まず算出方法。「Qcache_lowmem_prunes」と「Qcache_inserts」とはなんぞや。

・Qcache_lowmem_prunes: メモリ不足を解消するために、クエリ キャッシュから削除されたクエリの数。
・Qcache_inserts: キャッシュに追加したクエリ数。

ということなので、

    Qcache_lowmem_prunes / Qcache_inserts * 100

は、

    (クエリキャッシュから削除されたクエリの数 ÷ キャッシュに追加したクエリの数) × 100

ということですね。

つまり、「キャッシュに追加されたクエリの内、どれだけが削除されたか」の割合(%)が 「91.4%」なんですね。

つーか、ちゃんと「判断理由」のとこに書いてありますね。日本語がわかりにくいけど。

素直にquery_cache_sizeを増やします。

    query_cache_size: 128M

↓↓↓

    query_cache_size: 256M

とりあえず倍にして様子を見ます。

以下のサイトを参考にさせて頂きました。