監視用の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