16K アトミック書き込みは、追加費用なしで、ApsaraDB RDS for MySQL の書き込みパフォーマンスを最低でも 40% 向上させる機能です。この機能は、16 KB のデータページの書き込みがすべてアトミックであることを InnoDB ストレージエンジンに対してハードウェアレベルで保証する仕組みです。これにより、二重書き込みメカニズムが不要になります。
仕組み
MySQL の InnoDB ストレージエンジンは、16 KB のページ単位でデータの読み書きを行いますが、ほとんどのファイルシステムは 4 KB のブロック単位で書き込みを行います。特別な保護がない場合、書き込みの途中で停電が発生すると、ページが部分的にしか書き込まれない状態 (部分的な書き込み) になる可能性があります。これは InnoDB が自力で回復できない状態です。
InnoDB の従来の解決策は、二重書き込みメカニズムです。まず各ダーティページを二重書き込みバッファーに書き込み、その後、本来の場所にフラッシュします。これにより、すべてのフラッシュが 1 回ではなく 2 回の書き込み操作となり、書き込み I/O 負荷がほぼ 2 倍になります。
16K アトミック書き込みは、異なるアプローチを取ります。各ページを 2 回書き込む代わりに、基盤となるストレージに対して、16 KB の書き込みが完全に完了するか、まったく行われないかのいずれかであることを保証するように要求します。この保証があれば、二重書き込みバッファーは安全性の向上に寄与しなくなるため、innodb_doublewrite は無効化され、書き込み I/O が半分に削減されます。
前提条件
開始する前に、以下をご確認ください。
-
MySQL 5.7 または MySQL 8.0 を実行している RDS インスタンス
-
ストレージタイプ:標準 SSD または高性能 ESSD
課金
16K アトミック書き込みは無料です。有効化または無効化による料金は発生しません。
使用上の注意
-
インスタンスの再起動が必要: インスタンスが再起動します。変更を行う前に、ダウンタイムを計画してください。
-
プライマリインスタンスと読み取り専用インスタンスの連携: プライマリインスタンスで 16K アトミック書き込みが有効になっている場合、読み取り専用インスタンスで無効にすることはできません。読み取り専用インスタンス側でのみ無効にすると、パフォーマンスの不一致が生じ、レプリケーション遅延の原因となります。
-
設定の継承: 読み取り専用インスタンスとバックアップから復元されたインスタンスは、ソースインスタンスの 16K アトミック書き込み設定を継承します。
16K アトミック書き込みの有効化または無効化
前提条件と以下の条件を満たすインスタンスでは、16K アトミック書き込みがデフォルトで有効になっています。
-
新規インスタンス: 2025 年 5 月 14 日以降に ApsaraDB RDS コンソールから購入されたインスタンス。
-
既存の YiTian RDS インスタンス: 製品タイプが変更されていないインスタンス。既存の標準インスタンスは 16K アトミック書き込みをサポートしていません。
-
ApsaraDB RDS インスタンスリストを開き、リージョンを選択して、対象インスタンスの ID をクリックします。
-
[基本情報] ページで、[16K アトミック書き込み] スイッチをクリックして、この機能を有効または無効にします。
パフォーマンスのテスト
以下の結果は、High-availability Edition のインスタンスと高性能 ESSD を使用し、Sysbench の oltp_write_only を用いて、16K アトミック書き込みの有効化前後の QPS を比較測定したものです。
テストのセットアップ
テストインスタンス
| エディション | ストレージタイプ | インスタンスファミリー | インスタンスタイプ | スペック |
|---|---|---|---|---|
| High-availability Edition | 高性能 ESSD | 汎用 | mysql.n2.large.2c | 4 コア、8 GB |
| High-availability Edition | 高性能 ESSD | 専用型 | mysql.x2.large.2c | 4 コア、8 GB |
テストデータ: 30 テーブルにわたり 300 GB、各テーブル 4,000 万行。
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 |
40,000,000 | テーブルあたりの行数 |
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
テスト結果
16K アトミック書き込み
-
汎用インスタンス (4 コア、8 GB): 16K アトミック書き込みを有効にした後 (オレンジ色)、QPS が 48% 向上しました。

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

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