回答:
理由を理解するには、InnoDBの履歴が必要です。ここに行く:
InnoDBとクエリキャッシュは常に戦争状態にあります。InnoDBは、InnoDBバッファープールの変更を検査し、同じ変更についてクエリキャッシュをクロスチェックする場合、非常に手間がかかる傾向があります。
MySQL 5.0より前では、InnoDBのクエリキャッシュは無効でした。現在、InnoDBはそれと対話します。問題を簡素化するために、query_cache_sizeを0に設定して、クエリキャッシュを無効にすることができます。
query_cache_timeのMySQLドキュメントによると
query_cache_typeを0に設定してサーバーを起動すると、クエリキャッシュミューテックスがまったく取得されません。つまり、実行時にクエリキャッシュを有効にできず、クエリ実行のオーバーヘッドが減少します。
query_cache_sizeを0に設定することは、万能ソリューションではありません。
そもそも戦争の理由はオーバーヘッドです。InnoDBは常に変更を検査します。クエリキャッシュを大きくすると、InnoDBの動作がさらに難しくなります。クエリキャッシュを無効にすると、InnoDBとクエリキャッシュを満足させることができます。ただし、あなた(開発者/ DBA)は、そのような平和条約が実施されていても、クエリのパフォーマンスが悪いということで、その戦争の犠牲者になる可能性があります。
以下に応じて
query_cache_sizeには、パフォーマンスを向上させると思われる数値を設定する必要があります(これは、アンダーグラウンドムーブメントを開始することに相当します)。
私がこの戦争の物語をどこで思いついたのか疑問に思っているなら、私の古い投稿を見てください
Sep 05, 2012
:頻繁なクエリキャッシュの無効化のオーバーヘッドは価値がありますか?ハイパフォーマンスMySQL(第2版)のPages 209-215からこれを学んだため、注意深く読んでください
クエリキャッシュを他のユーザーに対して無効にすることをお勧めします
Sep 25, 2013
:クエリキャッシュエントリ(キー)の無効化Sep 26, 2013
:クエリキャッシュヒット値がデータベースで変更されていませんDec 23, 2013
:CPUとメモリの使用率が高いMySQL注:質問はquery_cache_typeに関するものであることがわかりました。クエリキャッシュに影響します。キャッシュを無効にすると、InnoDBがキャッシュを支配しなくなります。query_cache_typeを手動で設定すると、単に開発者/ DBAがクエリキャッシュで発生するクエリのタイプを慎重に考えるようになります。
これがここにある理由を説明するブログ投稿があります。
短いバージョン: クエリキャッシュにより、マルチコアマシンでスケーラビリティの問題が発生します。そのため、デフォルトでは無効になっています。
答えを完成させるために、クエリキャッシュ機能を「置き換える」ためのOracleのプッシュはmemcached統合です。