ディスクI/O効率とシステムの応答速度を向上させたい場合は、ApsaraDB RDS for MySQLインスタンスに一般的なエンタープライズSSD (ESSD) のI/Oアクセラレーション機能を使用できます。 この機能は、バッファプールのサイズを拡大し、キャッシュアクセラレーションを実装し、RDSインスタンスの全体的な読み取りおよび書き込みパフォーマンスを向上させるのに役立ちます。 このトピックでは、I/Oアクセラレーション機能の仕組みと使用方法について説明します。 このトピックでは、機能のパフォーマンステストの詳細についても説明します。
背景情報
ディスクからメモリへのデータの読み出しおよびメモリ内のデータのディスクへの書き込みは、データベースシステムにおける一般的なI/O動作である。 ディスクI/O操作は、メモリ内操作よりも遅く、完了するまでに時間がかかります。 データベースシステムに大量の読み書き作業負荷が発生したり、頻繁な読み書き要求を処理する必要がある場合、ディスクI/Oがパフォーマンスのボトルネックになる可能性があります。
ApsaraDB RDSは、新しいストレージタイプである一般的なESSDを起動します。 一般的なESSDは、ESSDのすべての機能と互換性があり、3層ストレージアーキテクチャを使用してさまざまな種類のデータとキャッシュを階層的に管理、読み取り、書き込み、I/OバーストおよびI/Oアクセラレーション機能をサポートして、ApsaraDB RDSインスタンスのI/Oパフォーマンスを向上させます。
I/Oアクセラレーション
概要
バッファプールは、ディスクデータをキャッシュするために使用されるメモリの領域である。 データ・ブロックをディスクから読み出し、またはディスクに書き込む必要がある場合、システムは、バッファ・プールからデータ・ブロックを検索する。
データ・ブロックがバッファ・プール内に見つかった場合、システムは、バッファ・プールとの間でデータを読み書きする。
データ・ブロックがバッファ・プールに見つからない場合、システムはディスクからデータを読み取り、またはディスクにデータを書き込み、データをバッファ・プールに格納します。
バッファプールは、ディスクI/O操作の数を効率的に減らし、RDSインスタンスのI/Oパフォーマンスを向上させます。 バッファプールのサイズは、メモリサイズによって異なります。 メモリリソースが不足している場合、バッファプールのサイズは制限されます。 これはI/Oパフォーマンスに影響します。
ApsaraDB RDS for MySQLのI/Oアクセラレーション機能は、バッファプールのサイズを拡張するためのバッファプール拡張機能 (BPE) を提供します。 この機能は、必要なデータベースエンジンのカーネル機能に基づいて、RDSインスタンスの全体的な読み取りおよび書き込みパフォーマンスを向上させ、RDSインスタンスが特定の期間内により多くの読み取りおよび書き込み要求を処理できるようにします。 これにより、ディスクI/O効率とシステムの応答速度が向上し、キャッシュの高速化が実現します。
メリット
I/Oアクセラレーション機能でBPEがサポートされると、ApsaraDB RDS for MySQLに3層ストレージアーキテクチャが提供されます。 これにより、さまざまなシナリオでストレージのニーズに合わせ、Alibaba Cloudベースのさまざまなストレージメディアを最大限に活用でき、RDSインスタンスのI/Oパフォーマンスが向上します。
SQLクエリの読み書きパフォーマンスの向上と実行時間の短縮
BPEは、データをキャッシュすることにより、データページアクセスの速度を大幅に向上させ、SQLクエリの実行時間を短縮します。
BPEは、RDSインスタンスの一般的なESSDのデータファイルにアクセスする頻度を大幅に削減し、一般的なESSDの帯域幅を削減します。
インスタンスの安定性の向上
BPEが有効になっているディスクは、一般的なESSDよりもレイテンシが低くなります。 BPEは、RDSインスタンスに対する一般的なESSDのI/Oジッタの影響を大幅に軽減し、RDSインスタンスの安定性を向上させます。
Alibaba Cloud Business Foundation System Solution Experience Centerでは、実際のRDSインスタンスに基づいて、I/Oアクセラレーション機能が有効化される前後のリアルタイムのストレステスト結果を表示できます。 この機能は無料で提供されています。 詳細については、「一般的なESSDのI/Oアクセラレーション機能のパフォーマンスと価格の確認」をご参照ください。
値
RDSインスタンスのI/Oアクセラレーション機能を有効にした場合、追加料金は発生せず、アプリケーションのコードを変更する必要もありません。
コストやアプリケーションコードを変更することなく、RDSインスタンスのI/Oパフォーマンスが大幅に向上します。 たとえば、RDSインスタンスはRDS High-availability Editionを実行し、8コアと16 GBのメモリを提供する汎用インスタンスタイプを使用し、RDSインスタンスのI/Oアクセラレーション機能を有効にします。 この場合、読み取りおよび書き込み操作の1秒あたりのクエリ (QPS) が増加します。 詳細については、「パフォーマンステスト」をご参照ください。
I/Oアクセラレーション機能の仕組み
一般的なESSDのI/Oアクセラレーション機能は、BPEを使用して、コストを増加させることなくESSDのパフォーマンスを向上させます。 I/Oアクセラレーション機能は、ホットデータとコールドデータの分離ストレージ機能を継承し、データページをキャッシュしてBPEにデータをウォームするためのInnoDBバッファプールのサイズを拡大します。 これにより、InnoDBは複数のストレージメディアを柔軟に使用してQPSを増やすことができます。
アーキテクチャ
次の図は、BPEの展開アーキテクチャを示しています。
BPEは、メモリと一般のESSD間のキャッシュメディアとして、さまざまな高速ディスクを使用します。 一般的なESSDと比較して、高速ディスクはI/Oレイテンシが低く、パフォーマンスが向上します。
高速ディスクはキャッシュメディアのみです。
データファイル、バイナリログファイル、およびredoファイルは、一般的なESSDに保存されます。
この機能により、InnoDBバッファプールのサイズが増加し、バッファプール内のデータページがBPEにキャッシュされます。 このように、InnoDBは複数のストレージメディアを柔軟に使用できます。
実装
I/Oアクセラレーション機能を有効にすると、RDSインスタンスのデータページが高速ディスクのBPEにキャッシュされます。
BPEにキャッシュされたすべてのデータページはクリーンページです。 これらのページは、一般的なESSDに保存されているデータファイルのデータと一致しています。
次のリストは、データページを読み取るプロセスを示しています。
クライアントは、データページを読み取る要求を開始する。
要求はメモリのバッファプールに行き、データページを照会する。
バッファプール内にデータページが見つかった場合、クエリ結果がクライアントに返され、クエリと読み取りが終了します。
データページがバッファプールに見つからない場合、システムはステップ3に進む。
要求は高速ディスクのBPEに行き、データページを照会する。
データページがBPEで見つかった場合、データページはバッファプールに返され、クエリ結果がクライアントに返されます。 クエリと読み取りが終了します。
データページがBPEに見つからない場合、システムはステップ4に進む。
要求は、一般的なESSDのデータテーブルファイルに行き、データページを照会する。 データページが見つかった場合、データページはバッファプールに返され、クエリ結果がクライアントに返されます。
クエリと読み取りが終了します。
適用範囲
RDSインスタンスはMySQLを実行します。
RDSインスタンスは、MySQL 8.0と20230914以降のマイナーエンジンバージョンを実行します。
RDSインスタンスは、RDS High-availability EditionまたはRDS Cluster Editionを実行します。
RDSインスタンスのプロダクトタイプは標準です。
RDSインスタンスは、汎用インスタンスタイプを使用します。
RDSインスタンスは、次のいずれかのリージョンおよびゾーンにあります。 ApsaraDB RDSコンソールでサポートされているリージョンとゾーンを表示できます。
リージョン
Zone
中国 (成都)
ゾーンB
中国 (北京)
ゾーンI
中国 (上海)
ゾーンM
ゾーンN
中国 (杭州)
ゾーンJ
説明ApsaraDB RDS購入ページでI/Oアクセラレーション機能を有効にした後、[プライマリノードのゾーンとネットワーク] セクションで機能が利用可能かどうかを確認できます。
課金ルール
汎用インスタンスタイプを使用するRDSインスタンスに対して一般的なESSDのI/Oアクセラレーション機能を有効にした場合、この機能に対して課金されません。
使用上の注意
I/Oアクセラレーション機能は、汎用インスタンスタイプを使用するRDSインスタンスに対して無料で提供されます。
ビジネスデータはデータディスクに永続的に保存されます。 したがって、BPEでのデータ損失は、ビジネスデータおよびRDSインスタンスの通常の使用に影響を与えません。
I/Oアクセラレーション機能の使用は、特定の量のメモリを占有します。 量は、buffer_pool_sizeパラメーターで指定されたメモリ量の4% に等しくなります。 buffer_pool_sizeパラメーターのデフォルト値に基づいて割り当てられるメモリの量は、自動的に4% 削減されます。 その後の操作でbuffer_pool_sizeパラメーターの値を変更する場合は、メモリ使用量の指標に基づいて値を変更できます。
RDSインスタンスのI/Oアクセラレーション機能を有効または無効にすると、約30秒間のサービス中断が発生します。 オフピーク時には、この機能を有効または無効にすることを推奨します。
RDSインスタンスのI/Oアクセラレーション機能を有効にすると、RDSインスタンスのパフォーマンスが大幅に向上します。 RDSインスタンスの仕様が高いほど、インスタンスのパフォーマンスが向上します。 たとえば、標準RDSインスタンスはRDS High-availability Editionを実行し、8コアと16 GBのメモリを提供する汎用インスタンスタイプを使用します。 この場合、RDSインスタンスのパフォーマンスを103% に向上させることができます。
バッファプールは、ディスクI/O操作の数を効率的に減らし、RDSインスタンスのI/Oパフォーマンスを向上させます。 バッファプールのサイズは、メモリサイズによって異なります。 メモリリソースが不足している場合、バッファプールのサイズは制限されます。 これはI/Oパフォーマンスに影響します。
I/Oアクセラレーション機能の使用
I/Oアクセラレーション機能の有効化
RDSインスタンスの作成時にI/Oアクセラレーション機能を有効にする
RDSインスタンスを作成するときに、I/Oアクセラレーション機能を使用するために必要なパラメーターを設定し、RDSインスタンスのI/Oアクセラレーション機能を有効にすることができます。 詳細については、「一般的なESSDのI/Oアクセラレーション機能の使用」をご参照ください。
機能を使用するための要件を満たす既存のRDSインスタンスのI/Oアクセラレーション機能を有効にする
ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 RDSインスタンスを見つけ、インスタンスIDをクリックします。
[基本情報] セクションで、[ストレージタイプ] パラメーターの右側にある [一般ESSDの設定] をクリックします。 表示されるダイアログボックスで、I/Oアクセラレーションをオンにします。
I/Oアクセラレーション機能の無効化
ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 RDSインスタンスを見つけ、インスタンスIDをクリックします。
[基本情報] セクションで、[ストレージタイプ] パラメーターの右側にある [一般ESSDの設定] をクリックします。 表示されるダイアログボックスで、I/Oアクセラレーションをオフにします。
パフォーマンステスト
テストの準備
方法: 同じインスタンスタイプを使用するRDSインスタンスで読み取りおよび書き込み操作を実行し、RDSインスタンスのI/Oアクセラレーション機能が有効になる前後のQPSパフォーマンスを比較します。
データ量: 300 GB。
ツール: Sysbench。 詳細については、「Sysbenchドキュメント」をご参照ください。
説明事前にElastic Compute Service (ECS) インスタンスを作成します。 この例では、テストツールはECSインスタンスにインストールされています。 詳細については、「ECSコンソールを使用したECSインスタンスの作成と管理」をご参照ください。
テストインスタンス: RDS High-availability Editionを実行し、汎用インスタンスタイプを使用する2つのRDSインスタンス。 一方のRDSインスタンスは4コアと8 GBのメモリを提供し、もう一方のRDSインスタンスは8コアと16 GBのメモリを提供します。 RDSインスタンスのI/Oアクセラレーション機能が有効になっています。
RDSエディション
インスタンスタイプ
CPUコア数とメモリ容量
RDS高可用性エディション
mysql.n2.large.xc
4 コア 8 GB
RDS高可用性エディション
mysql.n2.xlarge.xc
8 コア 16 GB
テスト方法
このセクションでは、パフォーマンステストを実行するための例としてCentOSシステムを使用します。 Sysbenchを他のオペレーティングシステムにインストールする場合は、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
RDSインスタンスのQPSパフォーマンスのテスト
説明
次の表に、パフォーマンステストに関連するパラメーターを示します。
パラメーター | 説明 |
-- テーブル | テーブルの数。 |
-- table_size | 各テーブルのエントリ数。 |
-- ランドタイプ | 乱数の生成に使用される分布のタイプ。 |
-- rand-spec-pct | 特別な値と見なされる特別な乱数の割合。 |
-- threads | 同時スレッドの数。 |
-時間 | テストの期間。 単位は秒です。 |
読み取りパフォーマンスのテストTest the read performance
次のコマンドを実行して、1テーブルあたり40万行の30テーブルを含む300 GBのデータを生成します。
sysbench oltp_read_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare
次のコマンドを実行して、RDSインスタンスの読み取りパフォーマンスをテストします。
sysbench oltp_read_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 run
書き込みパフォーマンスのテストTest the write performance
次のコマンドを実行して、1テーブルあたり40万行の30テーブルを含む300 GBのデータを生成します。
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare
次のコマンドを実行して、RDSインスタンスの書き込みパフォーマンスをテストします。
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 run
読み取りと書き込みのパフォーマンスをテストする
次のコマンドを実行して、1テーブルあたり40万行の30テーブルを含む300 GBのデータを生成します。
sysbench oltp_read_write --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare
次のコマンドを実行して、RDSインスタンスの読み書きパフォーマンスをテストします。
sysbench oltp_read_write --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パフォーマンスは、I/Oアクセラレーション機能を有効にする前後で基本的に同じです。
書き込みパフォーマンス: I/Oアクセラレーション機能を有効にすると、QPSパフォーマンスは30% 向上します。
読み書きのパフォーマンス: I/Oアクセラレーション機能を有効にすると、QPSのパフォーマンスは26% 向上します。
次のリストは、RDS High-availability Editionを実行し、8コアと16 GBのメモリを提供する汎用インスタンスタイプを使用する標準RDSインスタンスのテスト結果を示しています。
読み取りパフォーマンス: I/Oアクセラレーション機能を有効にすると、QPSパフォーマンスは80% 向上します。
書き込みパフォーマンス: I/Oアクセラレーション機能を有効にすると、QPSパフォーマンスは33% 向上します。
読み書きのパフォーマンス: I/Oアクセラレーション機能を有効にすると、QPSのパフォーマンスは103% 向上します。