RDSでクエリキャッシュの設定をしてみました。完全我流ですので間違っているところがあれば教えてください。
【事前確認】
RDSの状態を確認します。2013年11月現在、RDSのMySQLを作成するとデフォルトでパラメータいくつかが付いて来ます。
これらパラメータは、AWSのコンソールのRDSの「Parameter Groups」にて設定されています。
デフォルトで利用エンジンのグループは存在するので、何も作成していない場合はこのデフォルトグループの値になっています。
今回はクエリキャッシュ設定です。クエリキャッシュに関する部分のみを見ますが、他の設定も同様に可能です。
デフォルトの環境は以下のようになっていました。
[html]
mysql> SHOW VARIABLES LIKE ‘have_query_cache’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| have_query_cache | YES |
+——————+——-+
1 row in set (0.00 sec)
[/html]
YESなので、クエリキャッシュが利用可能になってます。
[html]
mysql> SHOW VARIABLES LIKE ‘query_cache_%’;
+——————————+———+
| Variable_name | Value |
+——————————+———+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
+——————————+———+
5 rows in set (0.00 sec)
[/html]
リンクのサイトによると、それぞれこんな意味。
http://thinkit.co.jp/free/article/0707/2/6/
query_cache_limit キャッシュするクエリ結果の最大値
query_cache_min_res_unit クエリキャッシュのブロックサイズ
query_cache_size クエリキャッシュに使用するメモリ量の最大値
query_cache_type OFF:結果をキャッシュしない
query_cache_typeがOFFになっているので、現在クエリキャッシュは無効になっています。
ちなみに、ちょっと動かしているので実際の様子を見てみると、、、
[html]
mysql> SHOW STATUS LIKE ‘Qcache%’;
+————————-+———+
| Variable_name | Value |
+————————-+———+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1031368 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 2738878 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+————————-+———+
8 rows in set (0.01 sec)
[/html]
Qcache_queries_in_cacheもゼロ。
Qcache_hitsもゼロだし、動いていないですね。
では、設定してみます。
【設定変更】
AWSコンソール > RDS > Parameter Groups > Create DB Parameter Group で新しいグループを作成します。
■ 設定内容
DB Parameter Group Family:今回設定したいDBの利用エンジンの種類とバージョン
DB Parameter Group Name:名前(対象のDBが分かるようにつけるのが良さげ)
DB Parameter Group Description: 自由に書いて下さい。
作成されたら、リスト上の対象グループの虫メガネをクリックします。
すると、下部に「Parameters」という項目があります。
こちらの検索窓で query_cache_type と打ちましょう。
すると、この項目だけが抽出されるので、ここで、「Edit Parameters」。
Valuesを0~2の間でセットします。
ちなみに、query_cache_typeの場合、参考リンクによるとこうなります。
0 または OFF という値で、キャッシュを行わない、または キャッシュした結果の読み出しを行わない、という効果になります。
1 または ON という値で、SELECT SQL_NO_CACHE で始まるステートメント以外のキャッシュになります。
2 または DEMAND という値で、SELECT SQL_CACHE で始まるステートメントだけのキャッシュになります。
参考リンク
http://dev.mysql.com/doc/refman/5.1/ja/query-cache-configuration.html
今回はONにしたいので、1にセット。
そして「Save Changes」で保存しましょう。
その後、Instancesに移動し、該当のRDSの「Instance Actions」から「Modify」
Parameter Groupを変更します。そして、reboot。
【事後確認】
[html]
mysql> SHOW VARIABLES LIKE ‘have_query_cache’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| have_query_cache | YES |
+——————+——-+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE ‘query_cache_%’;
+——————————+———+
| Variable_name | Value |
+——————————+———+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+——————————+———+
5 rows in set (0.00 sec)
[/html]
query_cache_type がONになっています。
[html]
mysql> SHOW STATUS LIKE ‘Qcache%’;
+————————-+——–+
| Variable_name | Value |
+————————-+——–+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 873232 |
| Qcache_hits | 26 |
| Qcache_inserts | 76 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 420 |
| Qcache_queries_in_cache | 46 |
| Qcache_total_blocks | 103 |
+————————-+——–+
8 rows in set (0.00 sec)
[/html]
現在のキャッシュ状況を確認すると、キャッシュされ始めているのが分かりました。
というわけで、キャッシュ設定をしてみました。