Aurora MySQL 3.04.2で解決したはずのDDL実行中にリーダーからテーブルが見えなくなる挙動が再発するケース
メディア統括本部 サービスリライアビリティグループ(SRG)の鬼海雄太(@fat47)です。
#SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。
本記事は、Aurora MySQL3.04.2で解決したはずの「DDL実行中にリーダーからテーブルが見えなくなる挙動」が再発するケースについてまとめました。
なにかの役に立てば幸いです。
オンラインDDL実行中にリーダーからテーブルが見えなくなる再発するケース手元環境での再現検証再現用テーブルの作成100万件程度適当にレコードをINSERTするライターエンドポイントにオンラインDDL実行オンラインDDL実行中にリーダーエンドポイントにSELECT実行ライターエンドポイントに2回目のオンラインDDL実行ライターエンドポイントに3回目のオンラインDDL実行3回目のオンラインDDL実行中にリーダーエンドポイントにSELECT実行他のバージョンのAurora MySQLではどうか?3.04.3(MySQL8.0.28互換) → 再現する3.05.2(MySQL8.0.32互換) →再現する3.06.1(MySQL8.0.34互換) → 再現する3.07.0(MySQL8.0.36互換)→再現する終わりに
オンラインDDL実行中にリーダーからテーブルが見えなくなる
以前にブログ記事に書いていたのですが、
これはAurora MySQL 3系でオンラインDDL実行中()、完了するまでリーダーインスタンスからテーブルが存在しないように見えるという問題です。
この問題はAurora MySQL 3.04.2、もしくは3.05以上であれば解決されていました。
再発するケース
2024年7月11日にfreee様のブログにて以下の記事が投稿されていました。
再現条件の部分を一部引用させていただきます。
1a: そのテーブルへ問題の DDL が実行されてから、reader 経由でそのテーブルへアクセスされていない1b: そのテーブルが作成されてから、reader 経由でそのテーブルへアクセスされていない2: 1a か 1b が満たされている状態で、問題の DDL をそのテーブルへ実行する3: DDL 実行中に reader からそのテーブルへアクセス →テーブルが開けない事象発生
一度該当のオンラインDDLが実行されたテーブルに、リーダーからアクセスがない状況で
再びオンラインDDLを実行すると、その実行中はテーブルが見えなくなる。
ということのようです。
手元環境での再現検証
再現用テーブルの作成
100万件程度適当にレコードをINSERTする
ライターエンドポイントにオンラインDDL実行
オンラインDDL実行中にリーダーエンドポイントにSELECT実行
この時点では以前の検証通り問題は起きません。
ライターエンドポイントに2回目のオンラインDDL実行
完了後、リーダーにSELECTせずにすぐに3回目を実行します。
ライターエンドポイントに3回目のオンラインDDL実行
3回目のオンラインDDL実行中にリーダーエンドポイントにSELECT実行
テーブルが見えなくなりました!
もちろんオンラインDDLが完了すると再び見えるようになります。
つまり、既存の環境で安全にオンラインDDLを実行するには、
- 同じテーブルに対して連続でオンラインDDLを実行しない
- 時間を空けるか、リーダーからの読み取りを意図的に挟む
ということを意識する必要があります。
他のバージョンのAurora MySQLではどうか?
【結論】すべてのバージョンで再現します
3.04.3(MySQL8.0.28互換) → 再現する
まだ日本語版のリリースノートが公開されていませんが、2024年6月26日にLTSの最新のマイナーバージョン3.04.3が公開されています。
このバージョンでも再現しました。
3.05.2(MySQL8.0.32互換) →再現する
3.06.1(MySQL8.0.34互換) → 再現する
3.07.0(MySQL8.0.36互換)→再現する
終わりに
解決したと思った事象が実は残っていたというつらい話でした。
事象をブログに取り上げてくださったfreee様ありがとうございます!
この事象はAWS様にも伝えており、調査頂いているかと思いますので今後解決していってくれると嬉しいですね。
SRG では一緒に働く仲間を募集しています。
ご興味ありましたらぜひこちらからご連絡ください。