続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

RDSでParameter Groups変更時のDBリブートについて調査してみた

RDSはインスタンスのスペックに応じて、自動でDBパラメータを調整してくれるのが売りでもありますが、どうしても変更したいパラメータがあったりします。有名なところでは

  • max_allowed_packet
  • character_set_xxx 系

この辺りのパラメータや、もっと重いパラメータ(クエリキャッシュの有効化等) 変更時に、DBリブートはかかるのか、かけなくていいのかを検証します。今回はとりあえずMySQLです。

リブートが掛かっていないかの確認

スクリプトを用意しました。しょうもないスクリプトですが、使ってください。

#!/bin/bash

while :
do
 dt=$(date)
 state=$(timeout 5 mysqladmin ping -u<User> -p<Pass> -h<EndPoint>)
 echo $dt-$state
 sleep 1
done

failoverをやった場合に、mysqladmin が接続を掴んで離さず、正確な停止時間が測れなかったので、timeoutを使ってみます。今回はfailover関係ないですが、一応入れたままで使います。 使い方は

$ ./mysqlping.sh > reboot.txt &
$ tail -f reboot.txt

とか、tee でもいいですよ。

中身未設定のParameter Groupsを適応した場合

Parameter Groups を作成し、RDS Instance に適応しただけではリブートはかかりませんでした。 但し、マネジメントコンソールの表示は下記のように変化します。 設定直後 f:id:iga-ninja:20150225234504p:plain 設定後しばらくたったら f:id:iga-ninja:20150225234521p:plain pending rebootとなります。リブートは自動でかからないけど、リブートしないとParameter Groupsとして、paramtest は適応しないよ!という意味です。そのため、手動リブートが必要です。

Dynamicなパラメータを変更する

Parameter Groupsの設定画面で下記のような列があります。 f:id:iga-ninja:20150225235302p:plain これ、だいたい分かりますよね?たぶん

  • Dynamic = DBリブート不要
  • Static = DBリブート必要

だろうと、そう思ったら検証です。Dynamicでおそらくいちばん弄られているであろうパラメータを下記のように変更します。 f:id:iga-ninja:20150225235546p:plain

先の工程で、paramtestというのを一旦空で作成し、適用だけはしているので、マネジメントコンソールで確認すると、一旦applyingになり、 f:id:iga-ninja:20150225235742p:plain

すぐに in-syncとなります。リブートは自動で掛かることもないし、掛ける必要も無いです。 f:id:iga-ninja:20150225235829p:plain

Staticなパラメータを変更する

今度はリブートが必要であろうパラメータ query_cache_type を変更します。このパラメータは文字通りのクエリーキャシュですね。MySQLというかRDSはデフォルトNOなのか、、へぇそうなんだ。まずは変更前にmysqlコマンドで直接確認。

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)

OFFですね。ではマネジメントコンソールで変更した直後のステータスは f:id:iga-ninja:20150226000631p:plain

自動でリブートはもちろん掛からないが、しばらくすると f:id:iga-ninja:20150226000733p:plain

でた、pending reboot ということですので、手動でリブートする前に、パラメータ確認しましょう。

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)

OFFのまんまですね。

では、手動リブートし、しばらくした後確認したら。

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.01 sec)

ONになったよ!

まとめ

  1. Parameter Groups の変更や、割り当て作業で、自動でリブートかかることはない。
  2. Dynamicのパラメータ変更については、リブート不要。但し、Parameter GroupsのDBインスタンスへ割り当てと、同時に実行するなら、リブートは必要
  3. Staticのパラメータについては、リブート必須

とりあえず、RDSを立てたら、問答無用で Parameter Groups を一個作成し、適応、そしてリブートまでかけておけば、後からDynamicパラメータ変更となってもリブートの心配は不要ですし、損はないです。