16 KB アトミック書き込みは、ApsaraDB RDS for MySQL における書き込みパフォーマンスを、追加コストなしで最低でも 40 % 向上させます。この機能は、InnoDB ストレージエンジンに対し、すべての 16 KB データページ書き込みをハードウェアレベルでアトミック(完全または無)という保証を提供することで動作し、二重書き込みメカニズムを不要にします。
仕組み
MySQL の InnoDB ストレージエンジンは、データを 16 KB のページ単位で読み書きしますが、ほとんどのファイルシステムは 4 KB のブロック単位で書き込みを行います。追加の保護がない場合、書き込み中に電源障害が発生すると、ページが部分的に書き込まれた状態で残る可能性があります。このような状態は、InnoDB が独自に回復できない条件です。
InnoDB の従来の対策は、二重書き込み(doublewrite)メカニズムです。すなわち、各ダーティページをまず二重書き込みバッファーに書き込み、その後、実際の格納先にフラッシュします。これにより、1 回のフラッシュ操作が 2 回の書き込み操作となるため、書き込み I/O 負荷がほぼ倍増します。
16 KB アトミック書き込みは、異なるアプローチを取ります。各ページを 2 回書き込む代わりに、基盤となるストレージに対して「16 KB 単位の書き込みは、完全に完了するか、まったく行われないかのいずれかである」という保証を要求します。この保証が確立されれば、二重書き込みバッファーは安全性向上に寄与しなくなるため、innodb_doublewrite が無効化され、書き込み I/O が半減します。
前提条件
開始前に、以下の条件を満たしていることを確認してください。
MySQL 5.7 または MySQL 8.0 を実行中の RDS インスタンス
ストレージタイプ:標準 SSD または Premium ESSD
課金
16 KB アトミック書き込みは無料機能です。有効化および無効化にかかる費用は一切発生しません。
注意事項
インスタンス再起動が必要:16 KB アトミック書き込みの有効化または無効化を行うと、インスタンスが再起動されます。変更実施前にダウンタイムを計画してください。
プライマリインスタンスと読み取り専用インスタンスは連携:プライマリインスタンスで 16 KB アトミック書き込みが有効化されている場合、読み取り専用インスタンスでは無効化できません。読み取り専用側のみ無効化すると、パフォーマンスの不整合が生じ、レプリケーションの遅延を引き起こします。
設定は継承されます:読み取り専用インスタンスおよびバックアップから復元したインスタンスは、ソースインスタンスから 16 KB アトミック書き込みの設定を継承します。
16 KB アトミック書き込みの有効化/無効化
前提条件を満たし、かつ以下の条件を満たすインスタンスでは、16 KB アトミック書き込みがデフォルトで有効化されます。
新規インスタンス:2025 年 5 月 14 日以降に ApsaraDB RDS コンソールから購入されたもの。
既存の YiTian RDS インスタンス:プロダクトタイプ の変更履歴がないもの。既存のスタンダードインスタンスは、16 KB アトミック書き込みをサポートしていません。
ApsaraDB RDS インスタンス一覧を開き、リージョンを選択して、対象のインスタンス ID をクリックします。
基本情報 ページで、16 KB アトミック書き込み スイッチをクリックして、機能を有効化または無効化します。
パフォーマンス評価
以下の結果は、Premium ESSD を搭載したハイアベイラビリティエディションのインスタンスを対象に、Sysbench oltp_write_only を使用して測定したものです。16 KB アトミック書き込みの有効化前後における QPS を比較しています。
テストのセットアップ
評価対象インスタンス
| エディション | ストレージタイプ | インスタンスファミリー | インスタンスタイプ | 仕様 |
|---|---|---|---|---|
| ハイアベイラビリティ | Premium ESSD | 汎用 | mysql.n2.large.2c | 4 コア、8 GB |
| ハイアベイラビリティ | Premium ESSD | 専用 | mysql.x2.large.2c | 4 コア、8 GB |
評価データ:30 表、各表 4,000 万行、合計 300 GB。
Sysbench のインストール(CentOS 例):
git clone https://github.com/akopytov/sysbench.git
cd sysbench
git checkout 0.5
yum -y install make automake libtool pkgconfig libaio-devel
yum -y install mariadb-devel
./autogen.sh
./configure
make -j
make installテストデータの準備:
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare評価パラメーター
| パラメーター | 値 | 説明 |
|---|---|---|
tables | 30 | テーブル数 |
table_size | 40000000 | 1 テーブルあたりの行数 |
rand-type | special | 乱数分布 |
rand-spec-pct | 15 | 特殊値として扱う割合 |
threads | 64 | 同時実行スレッド数 |
time | 100 | テスト実行時間(秒) |
テストの実行
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 runテスト結果
16 KB アトミック書き込み
汎用インスタンス(4 コア、8 GB):16 KB アトミック書き込みを有効化した結果、QPS が 48 % 向上しました(オレンジ色)。

専用インスタンス(4 コア、8 GB):16 KB アトミック書き込みを有効化した結果、QPS が 47 % 向上しました(オレンジ色)。

16 KB アトミック書き込み + バッファプール拡張(BPE)
Premium ESSD のバッファプール拡張 (BPE) 機能の詳細については、「汎用 ESSD の I/O アクセラレーション機能の使用方法」をご参照ください。
汎用インスタンス(4 コア、8 GB):16 KB アトミック書き込みおよび BPE の両方を有効化した結果、QPS が 93 % 向上しました(オレンジ色)。
