FLUSH QUERY CACHE
コマンドでは、クエリキャッシュをデフラグメント化して、メモリの使用効率を良くすることができます。このコマンドを発行しても、キャッシュからクエリが削除されることはありません。
FLUSH TABLES
でも、クエリキャッシュがフラッシュされます。
RESET QUERY CACHE
コマンドでは、すべてのクエリ結果がクエリキャッシュから削除されます。
使用している MySQL バージョンにクエリキャッシュがあるかどうかは、次のコマンドで確認できます。
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
1 row in set (0.00 sec)
クエリキャッシュのパフォーマンスは、SHOW
STATUS
で監視できます。
変数 | 説明 |
Qcache_queries_in_cache |
キャッシュに登録されているクエリ数 |
Qcache_inserts |
キャッシュに追加されたクエリ数 |
Qcache_hits |
キャッシュヒット数 |
Qcache_lowmem_prunes |
メモリ不足のためにキャッシュから削除されたクエリ数 |
Qcache_not_cached |
キャッシュされていない(キャッシュ不可、または
QUERY_CACHE_TYPE
により)クエリ数 |
Qcache_free_memory |
クエリキャッシュの空きメモリ量 |
Qcache_free_blocks |
クエリキャッシュ内の空きメモリブロック数 |
Qcache_total_blocks |
クエリキャッシュ内の合計ブロック数 |
合計クエリ数 = Qcache_inserts
+
Qcache_hits
+
Qcache_not_cached
クエリキャッシュでは可変長ブロックが使用されるため、Qcache_total_blocks
と Qcache_free_blocks
によって、クエリキャッシュメモリのフラグメント化が示されることがあります。
FLUSH QUERY CACHE
を実行すると、1
つの(大きな)空きブロックだけが残ります。
注意:各クエリには、最低でも 2 ブロック必要です(クエリテキスト用に 1 ブロック、クエリ結果用に 1 ブロック以上)。また、クエリで使用される各テーブル用にも 1 ブロック必要です。ただし、複数のクエリで同じテーブルを使用している場合は、1 ブロックの割り当てですみます。
クエリのキャッシュサイズは、Qcache_lowmem_prunes
ステータス変数に基づいて調整できます。この値は、新しいクエリを格納できるようメモリを解放するためにキャッシュから削除されたクエリ数を示します。クエリキャッシュでは、使用されたうち最も古い
(LRU
)方針に従って、キャッシュから削除するクエリが決定されます。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.