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 |
+-------------------------+--------+
それぞれの変数に関する詳細は、Server Status Variables を参照してください。ここでは、それらの使用方法のいくつかについて説明します。
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.5.5.3. 「クエリキャッシュの設定」
を参照してください。