MySQLのクエリキャッシュについて

今まで、MySQLのクエリキャッシュを利用することに何の懸念も持っていなかったのだけど、以下のような意見があり、今後は少し気をつけようと思っています。


確かにヒット率という観点でみると、エンドユーザ向けのWebサービスでは、意味が無さそう。

今までMySQLのクエリキャッシュはは有効にしてたんですが、Webサービスだとキャッシュヒットするようなクエリはそんなに多くないし、どこかで見かけたんですが(失念…)クエリキャッシュをオフにしたら(逆に)パフォーマンスが上がっただか負荷が下がっただかというのも目にしたので、今度クエリキャッシュはオフにしようと思ってました。(どのみちヒット率悪いし)

MySQLで、指定したときだけクエリキャッシュする - (ひ)メモ


マルチコア環境という視点でも見てみると、DBサーバにある程度のCPU数があるならば、変にクエリキャッシュすると、マルチコア環境を活かせない可能性があるということですかね。

クエリキャッシュはCPUスケーラビリティが悪いので、8コアぐらいのマシンでInnoDB Pluginを入れて単純なクエリをゴリゴリ回すとクエリキャッシュなしの方が速い場合があります

はてなブックマーク - sh2のブックマーク / 2010年4月6日

設定方法

my.cnfの「query_cache_type」パラメータで設定するようです。「DEMAND」で設定しておくのがいいのかもしれません。

参考URL:MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.4 サーバーシステム変数

  • 0 または OFF
    • キャッシュを使用しない。注意:これはクエリ キャッシュのバッファの割当を解除しない。解除するには query_cache_size を 0 にセットする。
  • 1 または ON(※デフォルト
    • SELECT SQL_NO_CACHE を除くすべての結果をキャッシュする。
  • 2 または DEMAND
    • SELECT SQL_CACHE で始まるクエリだけをキャッシュする。