環境
- Auroraバージョン
- 移行前:2.11.3(MySQL5.7互換)
- 移行後:3.03.2(MySQL8.0.26互換)
- 接続元
- embulk
- Spring boot
バージョンアップ後に発生した事象
上記の通りバージョンアップした結果、embulkを用いたバッチ処理にて以下のエラーが発生していました。
[ERROR] [MY-013132] [Server] The table '/rdsdbdata/tmp/#sql3612_187cb_0' is full! (handler.cc:4380)
結論から言うと、原因は一時テーブルに使われる領域がAuroraの仕様変更によって小さくなり、大量データを持つテーブルに対して全件取得する際に、容量不足が起きていました。リーダーインスタンスのみで発生する限定的な事象です。
対処方法
親切なことに公式ドキュメントにきちんと対応方法が記載されています。これ通りに容量を増やしたら無事に解消しました。
アプリ側は問題が起きなかった
幸いなことに、今回発生した事象はデータ分析用基盤にデータを送るバッチ処理のため、影響はありませんでした。
アプリ側は入念に行なったMySQLの変更点の影響調査と検証、高負荷試験が功を奏して、何事もなくアップデートができました。
Auroraバージョンアップは何かとトラブルが起きやすいと聞いていたので、結果的にアプリの性能問題やバグ発生がなかったのは不幸中の幸いです。
失敗から学ぶ
反省すべき点は、Aurora側の変更点のドキュメントにきちんと目を通していなかったことです。
MySQL8.0側の変更点はすべて確認していましたが、Aurora側のドキュメントは関係ありそうな部分のみを探して読んでいました。
このプロセスの問題点は、見落とした仕様変更が原因でアプリ障害になりかねないことです。アプリ側では高負荷試験を実施していたから大丈夫と思っていましたが、テストは100%の保証を担保するのもではないです。
なぜなら、テストはあくまで、影響調査で立てた仮説を検証するものと捉えるべきだからです。
改めて、事前調査の大切さを実感しました。今回は大きな問題になることはなくてよかったですが、良くなかった点は真摯に受け止めて、二の舞を踏まないようにしたいです。