[アップデート]RDS for MySQL で書き込みスループットが最大2倍になりました #reinvent

RDS for MySQL で書き込みスループットがデフォルトで2倍になりました! しかも、料金そのままです!!
2022.11.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、崔です。

re:Invent2022 にあわせてアップデートがたくさんリリースされ始めましたね。いよいよ始まったな、と実感してきました。 今回のアップデートの内容は、次のとおりです。

RDS for MySQL で RDS Optimized Writes 機能がリリースされ、追加コストなしで書き込みスループットが最大2倍になりました

アップデート内容

簡単にいえば、RDS for MySQL 8.0.30 以上で db.r6i もしくはdb.r5bインスタンスを使えば、デフォルトで書き込みスループットが最大2倍も向上するよ、ということです
(東京リージョンでは db.r6i はまだサポートされてないから、db.r5b だけですね。2022年11月現在。)

今までは、「二重書き込みバッファ」と呼ばれる組み込み機能を使用して、電源障害などの予期しないデータ損失から書き込みロストを保護してきました。
今回のアップデートは、書き込みを1回だけにし、それでも、データ損失からの保護が可能になりました。
多数の同時トランザクションを生成する書き込み負荷の高いワークロードにはとってもうれしいことですね。

どうやって可能にしたの?と思いましたが、 RDS Optimized Writes では、AWS Nitro System を有効活用して、確実かつ永続的にストレージに1ステップで書き込みが行われるようです。(詳細は不明)
また、データベースは1ステップで16KiBページを確実かつ永続的に直接書き込むことができます。

RDS Optimized Writes は、パラメータ rds.optimized_writes を設定して有効化できますが、すでにデフォルトで有効になっています。
設定可能なパラメータ値は次のとおりです。

  • Auto - データベースがサポートしている場合は、RDS Optimized Writes をオンにします。サポートしていない場合はオフです。Autoがデフォルトになります
  • OFF - データベースがサポートしている場合でも、オフになります

また、RDS Optimized Writes を使用するように設定されたデータベースを、RDS Optimized Writes をサポートしていないインスタンスクラスに移行すると自動的にオフになります。

また、二重書き込みバッファか RDS Optimized Writes どちらを利用しているかは、innodb_doublewrite パラメータを確認することで可能です。 RDS Optimized Writes を利用している場合、パラメータはOFFに設定されます。

制限事項

  • RDS for MySQL 8.0.30以降
  • db.r6i および db.r5b インスタンス
  • 対応リージョン
    • バージニア北部、オレゴン、オハイオ、アイルランド、パリ、フランクフルト、東京、シンガポール
  • スナップショットから復元する場合、次の条件時のみ RDS Optimized Writes が有効になります
    • スナップショットが、RDS Optimized Writes をサポートするデータベースから作成された
    • 復元するデータベースのパラメータ rds.optimized_writes が Auto に設定されているとき

R5bは2021年9月に東京リージョンでリリースされてましたが、R6iは東京リージョンではまだ未サポートです。(2022年11月現在)

Amazon RDS now supports R5b instances for MySQL and PostgreSQL databases Amazon RDS for MySQL now supports M6i and R6i instances with new instance sizes up to 128 vCPUs and 1,024 GiB RAM

やってみた

まず、MySQLエンジンを選択し、フィルタの表示「Show versions that support the Amazon RDS Optimized Writes」をオンにします。
すると、サポートしているエンジンバージョンのみが表示されるので、今回は8.0.30を選択します。

次にインスタンスクラスを選択します。こちらもフィルタ「Amazon RDS Optimized Writes」をオンにします。
東京リージョンでは、r6iインスタンスがまだ未サポートなので、r5bインスタンスのみが表示されます。
今回は、一番小さい r5b.large インスタンスを選択します。

パラメータグループは今回はデフォルトのものをコピーして、そのまま設定します。 rds.optimized_writes はデフォルトで Auto になっています。

RDSを作成後、パラメータを確認しました。

MySQL [(none)]> show variables like '%doublewrite%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| innodb_doublewrite            | OFF   |
| innodb_doublewrite_batch_size | 16    |
| innodb_doublewrite_dir        |       |
| innodb_doublewrite_files      | 2     |
| innodb_doublewrite_pages      | 32    |
+-------------------------------+-------+

innodb_doublewrite パラメータが OFF になっているので、RDS Optimized Writes が有効化されているようです。
(東京リージョンではまだ機能が反映されていなかったので、結局、バージニア北部で作成しました)

まとめ

対象バージョン、対象インスタンスクラスを利用するのであれば、特に他の設定が必要なく、AWS Nitro Systemの恩恵を受けて、書き込みスループットが向上するようです。 しかも、料金そのままです。

パラメータもデフォルトのままでいいので、あまり気にすることもありません。

次回は、既存のインスタンスに、今回の新機能がどのように反映できるのか、確認したいと思います。