Edited at

RDSをMagneticからSSDにするときのmy.cnfパラメータ調整など

More than 3 years have passed since last update.

監視用のRDSをMagneticからSSD(gp2の600GB)にしていい(アイテム登録とかが超遅いのはI/Oがキテるせいではないのかという話になった)ということでそれ用パラメータグループの修正箇所の備忘録です。5.6です。はやまって5.7にしたりはしない予定です。

変えたところ:

パラメータ
デフォルト値
変更後値
理由

innodb_io_capacity
200
500
本来ディスクのIOPS性能くらいがいいらしいが5.6だと効率悪いらしくそこから1/3から1/4程度をOracleACEのyoku0825先生にオススメされたのとどこかでみたベンチの結果を思い出して。

innodb_open_files
2000
3000
mysqltunerでのアドバイス結果とshow global statusでTable_open_cache_overflowsが増えてるため

innodb_read_io_threads
4
6
読み込むI/Oスレッドが気持ちふえてたほうが早そう

innodb_sync_array_size
1
4
待機中スレッドについての同時実行性を高めるために、内部データ構造をいくつに分割するかを指定します。(mutex/rw_lockのイベント待ち処理の並列性に影響。)だそうです

innodb_write_io_threads
4
6
書き込むI/Oスレッドがきもち増えたほうがパフォーマンスがあがるので

query_cache_size
1048576
0
query_cache_typeがOFFなのとperconaのサイトの推奨値なので

table_open_cache
2000
3000
mysqltunerでのアドバイス結果とshow global statusでTable_open_cache_overflowsが増えてるため

max_heap_table_size
16777216
268435456
show global statusでCreated_tmp_disk_tablesが増えてるため

tmp_table_size
16777216
268435456
show global statusでCreated_tmp_disk_tablesが増えてるため

slow_query_log
0
1
スロークエリログ有効化

もしいっこだけしか調整しちゃいけなかったら迷わずinnodb_io_capacityですがそんな制限もないのでmysqltunerとかshow global status;とかみました。

こちらはgp2で600GBでその3倍のIOPSがベースなので1800だけど、その1/4とか1/3とからへんの値を適宜。

他も色々調整しておきました。さすがにいまよりは早くなるんじゃないですかね。

他に気になったのはinnodb_buffer_pool_instancesとかですが、バッファプールに割り当てられたやつを1GB以上で割った商とかにするといいらしいけど、

5.6だとデフォルト8なので今度割りあたるのは12GBであってまあほっとけばいいのかなという結論です。

(既知情報そうですが一応。innodb_buffer_pool_sizeは搭載メモリの75%とかに勝手になるので放置推奨というのがRDSが未調整で使える理由のひとつかなと。)

あと、innodb_io_capacity_maxですが、デフォルト2000で最大バーストが3000だけどio_capacityと同様に5.6だと効率悪いらしくあんまり増やさないほうがいいようです。

innodb_io_capacityがディスクのI/O性能カタログ値の1/3~1/4とかでinnodb_io_capacity_maxもあわせてギリギリにしないほうがいいらしいけど、減らすのもアレなのでデフォルト値のままにしておきました。

(むかしioDrive的な高速ディスクで%io%らへん調整でとんでもなくチートだった思い出。。最近だとAuroraがいいんですかね?地味に繰り返す大量処理が早くなるような話は聞いた気がします。

移行はReplicaつくってMaster昇格してHost名リネーム(または向き先修正)なつもりでいますがdumpするかも。

Master昇格で3時間ほどかかり(データ量がアレだからですかね。。)reboot後にbackupがとられてbackupにsnapshot的(おそらくsingle-transaction)にdumpとるのがデータ量分(今回1時間くらい)かかるぽくアクセスできるけどそのあとHost名かえるとrebootはしるので断ありみたいなことでbackup中に名前変えずにアクセスするにはRoute53(PrivateHostedZoneのほう)とかつかっとくのが無難そうなのかなというところです。TTLは60秒以上短くするとクエリが増えてお高くなると公式マニュアルに書いてあったので60でよさそうかな。

あとでディスク拡張するのは断なしでいけるようでした。

参考:

https://dev.mysql.com/doc/refman/5.6/ja/slow-query-log.html

https://www.percona.com/blog/2014/11/14/optimizing-mysql-zabbix/

https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl

http://qiita.com/sh-ogawa/items/088edd8ef46eaa3ad79c

https://blog.cloudpack.jp/2015/03/02/attention-about-operating-amazon-rds-on-ssd-of-general-purpose/

https://yoku0825.blogspot.jp/2014/10/innodbfileformat-antelopebarracuda.html

http://dev.classmethod.jp/cloud/aws/rds-monitoring-replication-state/

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/white-label-name-servers.html