RDS」カテゴリーアーカイブ




AWSのデータベース RDSのMySQLでクエリキャッシュを設定してみる




投稿日:

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]

現在のキャッシュ状況を確認すると、キャッシュされ始めているのが分かりました。

というわけで、キャッシュ設定をしてみました。