MySQL サーバーにクエリーキャッシュが存在するかどうかをチェックするには、次のステートメントを使用します。
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
FLUSH QUERY CACHE
ステートメントによって、クエリーキャッシュをデフラグして、そのメモリーの利用を改善できます。このステートメントは、キャッシュからクエリーを削除しません。
RESET QUERY CACHE
ステートメントは、クエリーキャッシュからすべてのクエリー結果を削除します。FLUSH TABLES
ステートメントもこれを実行します。
クエリーキャッシュのパフォーマンスをモニターするには、SHOW STATUS
を使用して、キャッシュのステータス変数を表示します。
mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+--------+
| Variable_name | Value |
+-------------------------+--------+
| Qcache_free_blocks | 36 |
| Qcache_free_memory | 138488 |
| Qcache_hits | 79570 |
| Qcache_inserts | 27087 |
| Qcache_lowmem_prunes | 3114 |
| Qcache_not_cached | 22989 |
| Qcache_queries_in_cache | 415 |
| Qcache_total_blocks | 912 |
+-------------------------+--------+
これらの各変数の説明は、セクション5.1.6「サーバーステータス変数」にあります。ここでは、それらのいくつかの使用方法について説明します。
SELECT
クエリーの合計数は、次の式で得られます。
Com_select
+ Qcache_hits
+ queries with errors found by parser
Com_select
値は次の式で得られます。
Qcache_inserts
+ Qcache_not_cached
+ queries with errors found during the column-privileges check
クエリーキャッシュでは、可変長ブロックを使用するため、Qcache_total_blocks
および Qcache_free_blocks
に、クエリーキャッシュのメモリー断片化が示されることがあります。FLUSH QUERY CACHE
後には、空きブロックが 1 つだけ残ります。
キャッシュされるすべてのクエリーには、少なくとも 2 つのブロック (1 つはクエリーテキスト用で、1 つ以上はクエリー結果用) が必要です。さらに、クエリーで使用される各テーブルにも 1 つのブロックが必要です。ただし、複数のクエリーで同じテーブルを使用している場合、1 つのテーブルブロックだけを割り当てる必要があります。
Qcache_lowmem_prunes
ステータス変数によって提供される情報は、クエリーキャッシュサイズをチューニングするのに役立つことがあります。それは、新しいクエリーのキャッシュのためにメモリーを解放するために、キャッシュから削除されたクエリーの数をカウントします。クエリーキャッシュは、LRU (Least Recently Used) 戦略を使用して、キャッシュから削除するクエリーを決定します。チューニング情報は、セクション8.9.3.3「クエリーキャッシュの構成」にあります。