カテゴリー別アーカイブ: RDS




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




投稿日:

RDSでクエリキャッシュの設定をしてみました。完全我流ですので間違っているところがあれば教えてください。

【事前確認】


RDSの状態を確認します。2013年11月現在、RDSのMySQLを作成するとデフォルトでパラメータいくつかが付いて来ます。

これらパラメータは、AWSのコンソールのRDSの「Parameter Groups」にて設定されています。
デフォルトで利用エンジンのグループは存在するので、何も作成していない場合はこのデフォルトグループの値になっています。


今回はクエリキャッシュ設定です。クエリキャッシュに関する部分のみを見ますが、他の設定も同様に可能です。


デフォルトの環境は以下のようになっていました。

mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+
1 row in set (0.00 sec)

YESなので、クエリキャッシュが利用可能になってます。

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)

リンクのサイトによると、それぞれこんな意味。
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になっているので、現在クエリキャッシュは無効になっています。

ちなみに、ちょっと動かしているので実際の様子を見てみると、、、

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)

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。



【事後確認】

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)

query_cache_type がONになっています。

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)

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

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