12/13~1/4で予定されているRDSのメンテナンスについてです
余計な事をした結果なのか、サンタさんからのプレゼントなのか判断できませんが、
がっちりハマったのでログを残します。
久しぶりの更新で心が痛い。
やりたかったこと:
年末年始にRDSのメンテナンスが予定されて居たため、コレを機にMySQLのマイナーバージョンアップと、Timezoneをスマートにするできたこと:
MySQLのマイナーバージョンアップ(5.6.37になりました)
できなかったこと:
Timezoneをスマートにできなかった
何があったのか:
メンテナンスウインドウによる自動アップデートではなく、事前にメンテナンス時間を決めて、対応を行いたかったので、どうすればいいのかサポートに問い合わせたところ、
「インスタンスタイプを変更すれば今回のメンテナンス要件を満たせますよ。リブートだけじゃダメ。」
との提案をいただきました。
上記対応を完了し、少人数で動作確認を実施しサービスイン。
10分後くらいに凄まじくConnectionが滞留し、インスタンスが再起動を頻発しサービス停止・・・。
何が原因なのかサポートに問い合わせるも、いまいち原因がつかめないため、MySQLのバージョンアップ以外の要素を切り戻し、様子見すると負荷が落ち着いている。
ということで、Timezoneをストアド・プロシージャで設定する旧来の方法と、パラメータグループで設定するスマートな方法を比較して見ることにしました。
sysbenchで負荷試験を掛けてみる:
以下の3パターン
1,ストアド・プロシージャ設定有り(init_connect有り+プロシージャ残し)+Timezone設定無し
2,ストアド・プロシージャ設定有り(init_connect無し+プロシージャ残し)+Timezone設定Asia/Tokyo
3,ストアド・プロシージャ設定無し(init_connect無し+プロシージャ削除)+Timezone設定Asia/Tokyo
基本的には、パラメータグループのinit_connectの設定で、ストアド・プロシージャを呼ばないはずなので、2と3はほぼおなじ結果になるはず。
結果:
1のパターン:
SQL statistics:2,3のパターン:
queries performed:
read: 13818
write: 3948
other: 1974
total: 19740
Initializing worker threads...ということで、Timezoneの設定をパラメーターグループに任せた場合なぜかパフォーマンスが落ちました。
FATAL: Worker threads failed to initialize within 30 seconds!
サポートにベンチ結果を含めて緊急障害でアラートを上げていますが、多分次回メンテには間に合わない気がする…。
あまり居ないとは思いますが、同じように色々と一緒に対応しようとしている人は気をつけてください。
おまけ:
今回のRDSメンテナンスでAWS側がやった作業
2017-12-25 04:17:02 Looking for 'mysql' as: /rdsdbbin/mysql/bin/mysql
2017-12-25 04:17:02 Looking for 'mysqlcheck' as: /rdsdbbin/mysql/bin/mysqlcheck
2017-12-25 04:17:02 Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock' '--socket=/tmp/mysql.sock'
2017-12-25 04:17:02 Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock' '--socket=/tmp/mysql.sock'
2017-12-25 04:17:02 mysql.columns_priv OK
2017-12-25 04:17:02 mysql.db OK
2017-12-25 04:17:02 mysql.event OK
2017-12-25 04:17:02 mysql.func OK
2017-12-25 04:17:02 mysql.general_log OK
2017-12-25 04:17:02 mysql.general_log_backup OK
2017-12-25 04:17:02 mysql.help_category OK
2017-12-25 04:17:02 mysql.help_keyword OK
2017-12-25 04:17:02 mysql.help_relation OK
2017-12-25 04:17:02 mysql.help_topic OK
2017-12-25 04:17:02 mysql.host OK
2017-12-25 04:17:02 mysql.innodb_index_stats OK
2017-12-25 04:17:02 mysql.innodb_table_stats OK
2017-12-25 04:17:02 mysql.ndb_binlog_index OK
2017-12-25 04:17:02 mysql.plugin OK
2017-12-25 04:17:02 mysql.proc OK
2017-12-25 04:17:02 mysql.procs_priv OK
2017-12-25 04:17:02 mysql.proxies_priv OK
2017-12-25 04:17:02 mysql.rds_configuration OK
2017-12-25 04:17:02 mysql.rds_global_status_history OK
2017-12-25 04:17:02 mysql.rds_global_status_history_old OK
2017-12-25 04:17:02 mysql.rds_heartbeat2 OK
2017-12-25 04:17:02 mysql.rds_history OK
2017-12-25 04:17:02 mysql.rds_replication_status OK
2017-12-25 04:17:02 mysql.rds_sysinfo OK
2017-12-25 04:17:02 mysql.servers OK
2017-12-25 04:17:02 mysql.slave_master_info OK
2017-12-25 04:17:02 mysql.slave_relay_log_info OK
2017-12-25 04:17:02 mysql.slave_worker_info OK
2017-12-25 04:17:02 mysql.slow_log OK
2017-12-25 04:17:02 mysql.slow_log_backup OK
2017-12-25 04:17:02 mysql.tables_priv OK
2017-12-25 04:17:02 mysql.time_zone OK
2017-12-25 04:17:02 mysql.time_zone_leap_second OK
2017-12-25 04:17:02 mysql.time_zone_name OK
2017-12-25 04:17:02 mysql.time_zone_transition OK
2017-12-25 04:17:02 mysql.time_zone_transition_type OK
2017-12-25 04:17:02 mysql.user OK
2017-12-25 04:17:02 Running 'mysql_fix_privilege_tables'...
こういう事が「12月 25 1:19 午後 Database instance patched」の中で行われていたみたいです。
内容が全くかかれていなかったため、気になるかたはチェックしてみてください。
サポートからの連絡を待ちつつ、メリークリスマス。
2017/12/26追記:
MySQL5.6.34で「3,ストアド・プロシージャ設定無し(init_connect無し+プロシージャ削除)+Timezone設定Asia/Tokyo」のベンチも取得してみた。
Timeoutにならず、ベンチが普通に完了。
2017/12/26追記:
MySQL5.6.34で「3,ストアド・プロシージャ設定無し(init_connect無し+プロシージャ削除)+Timezone設定Asia/Tokyo」のベンチも取得してみた。
Timeoutにならず、ベンチが普通に完了。
SQL statistics:・・・・・・MySQL5.6.37とTimezoneのあわせ技が原因・・・?
queries performed:
read: 8540
write: 2440
other: 1220
total: 12200
0 件のコメント:
コメントを投稿