ApsaraDB RDS for MySQL の 16K アトミック書き込み機能は、innodb_doublewrite パラメーター (InnoDB 二重書き込みメカニズム) を無効にすることで書き込み効率を向上させます。このトピックでは、書き込み最適化機能の使用方法とパフォーマンステストの実施方法について説明します。
背景情報
MySQL InnoDB エンジンのデータの最小読み取り/書き込み単位はページ (通常サイズ 16 KB) ですが、ファイルシステムの最小 I/O 単位は通常 4 KB です。データページがディスクに書き込まれる際、停電などの極端な状況では、InnoDB の一部のデータページがディスクに不完全に書き込まれる可能性があります。そのため、InnoDB はデータページの原子性を確保し、部分的な書き込みエラーを防ぐために二重書き込みメカニズムを導入しました。InnoDB がダーティページをフラッシュする必要がある場合、データは二重書き込みバッファーに書き込まれます。バッファーがいっぱいになると、ダーティページをフラッシュするために使用されるスレッドは、前のバッチのデータがディスクに書き込まれた後にのみ再度実行できます。各フラッシュ操作には 2 回の書き込み操作が含まれます。これにより、ディスク I/O リソースの消費が増加します。
ほとんどの場合、ディスク I/O は書き込み集中型のアプリケーションにとってパフォーマンスボトルネックになる可能性があります。InnoDB の二重書き込みメカニズムは、帯域幅リソースの消費を大幅に増加させ、ApsaraDB RDS for MySQL インスタンスのパフォーマンスに影響を与えます。
機能概要
ApsaraDB RDS for MySQL は、エンドツーエンドの 16K アトミック書き込みをサポートしています。16K アトミック書き込み機能を有効にすると、各データページの書き込みの原子性が確保され、InnoDB の二重書き込みメカニズムを安全に無効にすることができます。これにより、書き込み I/O 操作の数が減り、フラッシュ操作が簡素化され、ディスクへのデータ書き込みに必要な IOPS と帯域幅が大幅に削減され、RDS インスタンスの書き込みパフォーマンスが向上します。
16K アトミック書き込み機能を有効にすると、1 秒あたりのクエリ数 (QPS) が少なくとも 40% 増加します。詳細については、「パフォーマンステスト」をご参照ください。
前提条件
RDS インスタンスは MySQL 5.7 または MySQL 8.0 を実行します。
ストレージタイプ: RDS インスタンスは標準 SSD または高性能ディスクを使用します。
課金
16K アトミック書き込み機能は無料です。16K アトミック書き込み機能を有効または無効にしても課金されません。
注意事項
16K アトミック書き込み機能を有効または無効にすると、RDS インスタンスが再起動します。注意して進めてください。
プライマリインスタンスで 16K アトミック書き込み機能を有効にした場合、パフォーマンスの不整合によるレプリケーションの遅延を防ぐため、その読み取り専用インスタンスで 16K アトミック書き込み機能を無効にすることはできません。
読み取り専用インスタンスを作成するか、バックアップからデータを復元する場合、16K アトミック書き込みの構成はソースインスタンスから継承されます。
16K アトミック書き込みの管理
この機能をサポートするインスタンスについては、コンソールで 16K アトミック書き込み機能を手動で有効または無効にできます。
ApsaraDB RDS インスタンスリストにアクセスし、上部でリージョンを選択してから、ターゲットインスタンスの ID をクリックします。
[基本情報] ページで、16K アトミック書き込みスイッチをクリックして、16K アトミック書き込み機能を有効または無効にします。
パフォーマンステスト
テストの準備
テストリソースとメソッド: このテストでは、高性能ディスクを備えた高可用性インスタンスの汎用インスタンスタイプと専用インスタンスタイプでデータ書き込み操作を実行し、16K アトミック書き込み機能を有効にする前後のパフォーマンスの違いを観察します。
製品シリーズ
ストレージタイプ
インスタンスタイプ
仕様コード
CPU とメモリ
高可用性
高性能ディスク
汎用
mysql.n2.large.2c
4 コア, 8 GB
高可用性
高性能ディスク
専用
mysql.x2.large.2c
4 コア, 8 GB
テストツールのインストール: この例では、CentOS システムに Sysbench をインストールする方法を示します。次のコマンドを実行してインストールできます。詳細については、「Sysbench 公式ドキュメント」をご参照ください。
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テストデータの準備: 300 GB のデータ (30 テーブル、各テーブル 4,000 万行)
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
各テーブルの行数。この例では、各テーブルに 4,000 万行が含まれます。
rand-type
乱数の分布タイプ。この例では、special が使用されます。
rand-spec-pct
特殊な値と見なされる特殊な乱数の割合。この例では、15% が使用されます。
threads
同時実行スレッドの数。この例では、64 が使用されます。
time
テストの期間。単位: 秒。この例では、100 が使用されます。
書き込みパフォーマンステスト
テストインスタンスで次のコマンドを実行して、16K アトミック書き込み機能を有効にした場合と無効にした場合の QPS パフォーマンスを比較します。
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 runテスト結果
16K アトミック書き込みのテスト結果
次の図は、RDS 高可用性エディションを実行し、4 コアと 8 GB のメモリを備えた汎用インスタンスタイプを使用する標準 RDS インスタンスのテスト結果を示しています:
16K アトミック書き込み機能を有効にすると (オレンジ色)、QPS は 48% 増加します。

次の図は、RDS 高可用性エディションを実行し、4 コアと 8 GB のメモリを備えた専用インスタンスタイプを使用する標準 RDS インスタンスのテスト結果を示しています:
16K アトミック書き込み機能を有効にすると (オレンジ色)、QPS は 47% 増加します。

16K アトミック書き込み + バッファープール拡張 (BPE) のテスト結果
高性能ディスクのバッファープール拡張 (BPE) 機能の詳細については、「バッファープール拡張 (BPE) 機能」をご参照ください。
次の図は、RDS 高可用性エディションを実行し、4 コアと 8 GB のメモリを備えた汎用インスタンスタイプを使用する標準 RDS インスタンスのテスト結果を示しています:
16K アトミック書き込み機能とバッファープール拡張 (BPE) 機能を有効にすると (オレンジ色)、QPS は 93% 増加します。