ApsaraDB RDS for MySQLは、書き込み最適化機能を提供します。 InnoDB doublewriteメカニズムを参照するinnodb_doublewriteを無効にして、書き込み効率を向上させることができます。 このトピックでは、書き込み最適化機能の使用方法とパフォーマンステストの実施方法について説明します。
背景情報
InnoDBストレージエンジンfor MySQLは、doublewriteメカニズムを使用して、データページの原子性を確保し、半書き込みの問題を防止します。 InnoDBがダーティページをフラッシュする必要がある場合、データはダブルライトバッファに書き込まれます。 バッファがいっぱいになると、ダーティページをフラッシュするために使用されるスレッドは、前のバッチのデータがディスクに書き込まれた後にのみ再実行できます。 各フラッシュ動作は、2つの書き込み動作を含む。 これにより、ディスクI/Oリソースの消費が増加します。
ほとんどの場合、ディスクI/Oは、書き込み集中型アプリケーションのパフォーマンスのボトルネックになる可能性があります。 InnoDB doublewriteメカニズムは、帯域幅リソースの消費を大幅に増加させ、ApsaraDB RDS for MySQLインスタンスのパフォーマンスに影響を与えます。
機能の説明
書き込み最適化機能は、データページに対する各書き込み操作のアトミック性を確保し、InnoDBダブルライトメカニズムを安全に無効にすることを可能にします。 これにより、書き込みI/O操作の数が減り、フラッシュ操作が簡素化され、ディスクへのデータ書き込みに必要なIOPSと帯域幅が大幅に削減され、RDSインスタンスの書き込みパフォーマンスが向上します。 パフォーマンステストの詳細については、「パフォーマンステスト」をご参照ください。
前提条件
RDSインスタンスはMySQL 5.7またはMySQL 8.0を実行します。
RDSインスタンスは、エンタープライズSSD (ESSD) または一般的なESSDを使用します。
RDSインスタンスが作成中であるか、RDS High-availability EditionまたはRDS Cluster Editionを実行する既存のYiTian RDSインスタンスです。
課金ルール
書き込み最適化機能は無料で提供されます。
使用上の注意
書き込み最適化機能を有効または無効にすると、RDSインスタンスが再起動します。 作業は慎重に行ってください。
プライマリRDSインスタンスの書き込み最適化機能が有効になっている場合、読み取り専用RDSインスタンスの書き込み最適化機能を無効にすることはできません。 これにより、パフォーマンスの不整合によるレプリケーション遅延を防ぐことができます。
読み取り専用RDSインスタンスの作成、インスタンスのバックアップおよび復元のシナリオで書き込み最適化機能を使用すると、元のRDSインスタンスの設定が継承されます。
書き込み最適化機能の有効化
標準のRDSインスタンスを作成するときは、書き込み最適化機能を手動で有効にする必要があります。 YiTian RDSインスタンスを作成すると、書き込み最適化機能が自動的に有効になります。
書き込み最適化機能の管理
RDSインスタンスで書き込み最適化機能が有効になっている場合、RDSインスタンスの [基本情報] ページで機能を管理できます。
ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 RDSインスタンスを見つけ、インスタンスIDをクリックします。
[基本情報] ページで、書き込み操作機能を有効または無効にします。
パフォーマンステスト
テストの準備
テストリソースとテスト方法: このテストでは、RDS High-availability Editionを実行し、一般的なESSDを使用する2つのRDSインスタンスにデータが書き込まれます。 一方のインスタンスは汎用インスタンスタイプを使用し、もう一方のインスタンスは専用インスタンスタイプを使用します。 テストは、書き込み最適化機能を有効にする前後のインスタンスパフォーマンスを比較するために使用されます。
RDSエディション
ストレージタイプ
インスタンスファミリー
インスタンスタイプ
CPUコア数とメモリ容量
RDS高可用性エディション
一般的なESSD
汎用インスタンスファミリー
mysql.n2.large.2c
4 コア 8 GB
RDS高可用性エディション
一般的なESSD
専用インスタンスファミリー。
mysql.x2.large.2c
4 コア 8 GB
テストツールのインストール: このセクションでは、CentOSにsysbenchをインストールする方法について説明します。 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個のテーブルを使用する必要があります。
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare
次の表に、パフォーマンステストに関連するパラメーターを示します。
パラメーター
説明
テーブル
テーブルの数。 この例では、30個のテーブルが使用される。
table_size
各テーブルの行数。 この例では、各テーブルに40百万行が含まれます。
ランドタイプ
乱数の分布タイプ。 この例では、specialが使用されます。
rand-spec-pct
特別な値と見なされる特別な乱数の割合。 この例では、15% が使用されます。
スレッド
同時スレッドの数。 この例では、64が使用される。
time
テストの期間。 単位は秒です。 この例では、100が使用されます。
書き込みパフォーマンスのテストTest the write performance
テスト済みのRDSインスタンスで次のコマンドを実行し、書き込み最適化機能を有効にする前後のQPSパフォーマンスを比較します。
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 run
テスト結果
書き込み最適化のテスト結果
次の図は、RDS High-availability Editionを実行し、4コア、8 GBメモリの汎用インスタンスタイプを使用する標準RDSインスタンスのテスト結果を示しています。
書き込み最適化機能を有効にすると、QPSのパフォーマンスは48% 向上します。
次の図は、RDS High-availability Editionを実行し、4コアと8 GBのメモリを備えた専用インスタンスタイプを使用する標準RDSインスタンスのテスト結果を示しています。
書き込み最適化機能を有効にすると、QPSのパフォーマンスは47% 向上します。
I/Oアクセラレーションによる書き込み最適化のテスト結果
一般的なESSDのI/Oアクセラレーション機能の詳細については、「一般的なESSDのI/Oアクセラレーション機能の使用」をご参照ください。
次の図は、RDS High-availability Editionを実行し、4コア、8 GBメモリの汎用インスタンスタイプを使用する標準RDSインスタンスのテスト結果を示しています。
書き込み最適化機能を有効にすると、QPSのパフォーマンスは93% 向上します。