次のステートメントを使用して、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 |
+-------------------------+--------+
れぞれの変数に関する詳細は、項4.2.5. 「ステータス変数」 を参照してください。
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)
します。サイズの調節方法については、項4.13.3. 「クエリ キャッシュの設定」
を参照してください。