mysqld
の起動時には、コマンドラインで
mysqld
の少数の MySQL
システム変数がクエリキャッシュにより追加されます。これらのシステム変数はオプション設定ファイルで設定することができます。
query_cache_limit
これより大きい結果はキャッシュしない(デフォルト
1M)。
query_cache_min_res_unit
この変数はバージョン 4.1 以降で利用できる。
クエリの結果(クライアントにも送られるデータ)は結果の取り出し時にクエリキャッシュに格納される。したがって、通常、データは
1
つの大きなまとまりとして処理されるのではない。クエリキャッシュでは、データを格納するブロックが要求に応じて割り当てられる。1
つのブロックがいっぱいになると、新しいブロックが割り当てられる。
メモリ割り当て処理はコストが高い(時間的に)ため、クエリキャッシュでのブロックの割り当ては、query_cache_min_res_unit
に指定された最小サイズで行われる。
クエリが実行されると、最後の結果ブロックは実際のデータサイズに切り捨てられ、使用していないメモリが解放される。
query_cache_min_res_unit
のデフォルト値は 4
KB。ほとんどの場合、これで十分である。
結果が小さいクエリが数多くある場合は、デフォルトのブロックサイズを使用するとメモリがフラグメント化することがある(これは空きブロック(Qcache_free_blocks
)の数が多くなることでわかる。フラングメント化すると、メモリ不足によってキャッシュからクエリが削除される(Qcache_lowmem_prunes
)ことがある)。その場合は、query_cache_min_res_unit
の値を小さくする。
結果が大きいクエリが大半を占める場合は(Qcache_total_blocks
および Qcache_queries_in_cache
を参照)、query_cache_min_res_unit
の値を大きくすることによって、パフォーマンスを良くすることができる。ただし、あまり大きくしすぎないよう注意すること(上記を参照)。
query_cache_size
以前のクエリの結果を格納するために割り当てるメモリ量(バイト単位で指定)。この値を
0
にすると、クエリキャッシュは無効(デフォルト)になる。
query_cache_type
次のいずれかの値(数値のみ)を設定できる。
オプション | 説明 |
0 | (OFF - キャッシュへの格納、結果の取り出しをいずれも行わない) |
1 | (ON。SELECT SQL_NO_CACHE ...
クエリを除くすべての結果をキャッシュする) |
2 | (DEMAND。SELECT SQL_CACHE ...
クエリのみキャッシュする) |
クエリキャッシュの動作は、スレッド(接続)内でデフォルトから変更することができます。構文は次のとおりです。
QUERY_CACHE_TYPE = OFF | ON | DEMAND
QUERY_CACHE_TYPE = 0 | 1 | 2
オプション | 説明 |
0 または OFF | キャッシュへの格納、結果の取り出しをいずれも行わない。 |
1 または ON |
SELECT SQL_NO_CACHE ...
クエリを除くすべての結果をキャッシュする。 |
2 または DEMAND |
SELECT SQL_CACHE ...
クエリのみキャッシュする。 |
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.