ディスクの I/O 効率とシステムの応答速度を向上させたい場合は、RDS MySQL のパフォーマンス専有型ディスクの Buffer Pool Extension (BPE) 機能を使用できます。この機能は、バッファープールのサイズを拡張し、キャッシュを高速化し、RDS インスタンスの全体的な読み取りおよび書き込みパフォーマンスを向上させるのに役立ちます。このトピックでは、Buffer Pool Extension (BPE) 機能の技術的な原則、使用方法、および Performance Testing の詳細について説明します。
背景
ディスクからメモリへのデータの読み取り、およびメモリからディスクへのデータの書き込みは、データベースシステムにおける一般的な I/O 操作です。ディスクの I/O 操作はメモリ内操作よりも遅く、完了までに時間がかかります。データベースシステムで読み取りと書き込みのワークロードが重い場合や、頻繁な読み取りと書き込みのリクエストを処理する必要がある場合、ディスク I/O がパフォーマンスボトルネックになる可能性があります。
そのため、Alibaba Cloud RDS は、新しいストレージタイプであるパフォーマンス専有型ディスクを導入しました。ESSD ディスクのすべての機能との互換性を維持しつつ、パフォーマンス専有型ディスクは 3 層のストレージアーキテクチャを使用して、さまざまな種類のデータとキャッシュを管理し、読み書きします。また、I/O バースト機能と Buffer Pool Extension (BPE) 機能を導入して、RDS インスタンスの I/O パフォーマンスを向上させます。
Buffer Pool Extension (BPE) 機能の紹介
機能概要
バッファープールは、ディスクデータをキャッシュするために使用されるメモリのエリアです。データブロックをディスクから読み取るか、ディスクに書き込む必要がある場合、システムはバッファープールからデータブロックを検索します:
データブロックがバッファープールで見つかった場合、システムはバッファープールからデータを読み書きします。
データブロックがバッファープールで見つからない場合、システムはディスクからデータを読み取るか、ディスクにデータを書き込み、その後データをバッファープールに格納します。
バッファープールは、ディスク I/O 操作の数を効率的に削減し、RDS インスタンスの I/O パフォーマンスを向上させます。バッファープールのサイズは、メモリサイズによって異なります。メモリリソースが不足している場合、バッファープールのサイズは制限されます。これは I/O パフォーマンスに影響します。
RDS MySQL は、バッファープールのサイズを拡張するのに役立つ Buffer Pool Extension 機能を導入しています。RDS エンジンのカーネル機能と組み合わせることで、RDS MySQL の全体的な読み取りおよび書き込みパフォーマンスを技術的に向上させ、インスタンスが一定期間内により多くの読み取りおよび書き込みコマンドを実行できるようにし、ディスク I/O 効率とシステムの応答速度を向上させ、キャッシュの高速化を実現します。
機能の利点
Buffer Pool Extension を導入した後、RDS MySQL のストレージ構造は 3 つのレイヤーに分割されます。これにより、Alibaba Cloud インフラストラクチャのさまざまなストレージメディアを、さまざまなデータストレージのシナリオと要件に合わせて最大限に活用し、インスタンスの I/O パフォーマンスを向上させることができます:
読み取りおよび書き込みパフォーマンスの向上と SQL 実行時間の短縮
BPE は、データをキャッシュすることで、データページへのアクセス速度を大幅に向上させ、SQL クエリの実行時間を短縮します。
BPE は、インスタンスのパフォーマンス専有型ディスク内のデータファイルへのアクセス頻度を大幅に削減し、パフォーマンス専有型ディスクの帯域幅を削減します。
インスタンスの安定性の向上
BPE が配置されているディスクは、パフォーマンス専有型ディスクよりもレイテンシーが低くなっています。同時に、パフォーマンス専有型ディスクの I/O ジッターがデータベース操作に与える影響を大幅に軽減し、安定性を向上させます。
Buffer Pool Extension (BPE) ソリューションエクスペリエンスセンターでは、実際の RDS リソースを構築することで、Buffer Pool Extension (BPE) の有無によるリアルタイムの負荷テスト結果を視覚的に確認でき、この機能は無料です。詳細については、「RDS パフォーマンス専有型ディスク I/O アクセラレーション (BPE) パフォーマンスの観察」をご参照ください。
価値の利点
RDS MySQL インスタンスで Buffer Pool Extension (BPE) 機能を有効にした後、現在、追加料金を支払う必要はなく、ビジネスに変更を加える必要もありません。
RDS インスタンスの I/O パフォーマンスは、コストやアプリケーションコードを変更することなく大幅に向上します。たとえば、標準の RDS インスタンスが RDS High-availability Edition を実行し、8 コアと 16 GB のメモリを備えた汎用インスタンスタイプを使用している場合、Buffer Pool Extension (BPE) 機能を有効にすると、QPS の読み取りおよび書き込みパフォーマンスが向上します。詳細については、「Performance Testing」をご参照ください。
技術的な原則
パフォーマンス専有型ディスクの Buffer Pool Extension (BPE) 機能は、バッファープール拡張技術を使用して、コストを増やすことなく ESSD フォームからパフォーマンスを引き出します。この機能は、ホットデータとコールドデータの分離ストレージ機能を継承し、InnoDB バッファープールのサイズを増やして、データページとウォームデータを BPE にキャッシュします。これにより、InnoDB は複数のストレージメディアを柔軟に使用して QPS を向上させることができます。
技術アーキテクチャ
次の図は、BPE のデプロイメントアーキテクチャを示しています。

BPE は、メモリとパフォーマンス専有型ディスクの間に配置された複数の高速ディスクをキャッシュメディアとして使用します。パフォーマンス専有型ディスクと比較して、高速ディスクは I/O レイテンシーが低く、パフォーマンスが優れています。
高速ディスクはキャッシュメディアにすぎません。
データファイル、binlog ファイル、redo ファイルなどは、パフォーマンス専有型ディスクに格納されます。
この機能は、InnoDB バッファープールのサイズを増やして、バッファープール内のデータページを BPE にキャッシュします。これにより、InnoDB は複数のストレージメディアを柔軟に使用できます。
実装の原則
Buffer Pool Extension (BPE) 機能を有効にすると、インスタンスのデータページは高速ディスク上のバッファープール拡張にキャッシュされます。
バッファープール拡張に格納されているデータページはすべてクリーンページであり、パフォーマンス専有型ディスク上のデータファイル内のデータと一致しています。
次のリストは、データページを読み取るプロセスを説明しています:
クライアントがデータページの読み取りリクエストを開始します。
リクエストはメモリのバッファープールに送られ、データページをクエリします:
データページがバッファープールで見つかった場合、クエリ結果がクライアントに返され、クエリと読み取りは終了します。
データページがバッファープールで見つからない場合、システムはステップ 3 に進みます。
リクエストは高速ディスクの BPE に送られ、データページをクエリします:
データページが BPE で見つかった場合、データページはバッファープールに返され、その後クエリ結果がクライアントに返されます。クエリと読み取りは終了します。
データページが BPE で見つからない場合、システムはステップ 4 に進みます。
リクエストはパフォーマンス専有型ディスク上のデータテーブルファイルに送られ、データページをクエリします。データページが見つかった場合、データページはバッファープールに返され、その後クエリ結果がクライアントに返されます。
クエリと読み取りは終了します。
適用範囲
RDS インスタンスは MySQL を実行します。
RDS インスタンスは MySQL 8.0 を実行し、マイナーエンジンバージョンは 20230914 以降です。
RDS インスタンスは RDS High-availability Edition または RDS Cluster Edition を実行します。
RDS インスタンスのプロダクトタイプは標準です。
RDS インスタンスは汎用インスタンスタイプを使用します。
RDS インスタンスは、次のいずれかのリージョンとゾーンにあります。サポートされているリージョンとゾーンは、ApsaraDB RDS コンソールで表示できます。
リージョン
ゾーン
中国 (成都)
ゾーン B
中国 (北京)
ゾーン I
中国 (上海)
ゾーン M
ゾーン N
中国 (杭州)
ゾーン J
料金
パフォーマンス専有型ディスクを備えた RDS MySQL 汎用インスタンスタイプの Buffer Pool Extension (BPE) 機能は無料です。
注意事項
RDS MySQL 汎用インスタンスタイプの Buffer Pool Extension (BPE) 機能は無料です。
サービスデータはデータディスクに永続的に保存されるため、BPE 内のデータが失われるかどうかは、サービスデータや RDS インスタンスの通常の使用には影響しません。
Buffer Pool Extension (BPE) 機能を有効にすると、一定量のメモリ (buffer_pool_size の 4%) を占有します。buffer_pool_size パラメーターのデフォルト値に基づいて割り当てられるメモリ量は、自動的に 4% 削減されます。後続の操作で buffer_pool_size パラメーターの値を変更する場合は、メモリ使用量メトリックに基づいて値を変更できます。
Buffer Pool Extension (BPE) 機能を有効または無効にすると、インスタンスは約 30 秒間使用できなくなります。有効化および無効化の操作は、オフピーク時に実行することをお勧めします。
Buffer Pool Extension (BPE) 機能を有効にすると、インスタンスのパフォーマンスが大幅に向上し、インスタンスタイプが大きいほど、改善はより顕著になります。たとえば、標準の RDS インスタンスが RDS High-availability Edition を実行し、8 コアと 16 GB のメモリを備えた汎用インスタンスタイプを使用している場合、RDS インスタンスのパフォーマンスは 103% 向上します。
バッファープールは、ディスク I/O 操作の数を効率的に削減し、RDS インスタンスの I/O パフォーマンスを向上させます。バッファープールのサイズは、メモリサイズによって異なります。メモリリソースが不足している場合、バッファープールのサイズは制限されます。これは I/O パフォーマンスに影響します。
Buffer Pool Extension (BPE) 機能の使用
Buffer Pool Extension (BPE) の有効化
インスタンスリストにアクセスし、上部でリージョンを選択してから、ターゲットインスタンス ID をクリックします。
[基本情報] セクションで、[パフォーマンス専有型ディスクスイッチ設定] の横にある [ストレージタイプ] をクリックします。表示されるダイアログボックスで、[Buffer Pool Extension (BPE)] スイッチをオンにします。
Buffer Pool Extension (BPE) の無効化
インスタンスリストにアクセスし、上部でリージョンを選択してから、ターゲットインスタンス ID をクリックします。
[基本情報] セクションで、[パフォーマンス専有型ディスクスイッチ設定] の横にある [ストレージタイプ] をクリックします。表示されるダイアログボックスで、[Buffer Pool Extension (BPE)] スイッチをオフにします。
Performance Testing
テストの準備
テスト方法: 同じタイプのインスタンスでデータの読み取りおよび書き込み操作を実行し、Buffer Pool Extension (BPE) 機能を有効にする前と後で QPS パフォーマンスを比較します。
データ量: 300 GB。
テストツール: Sysbench (詳細については、「Sysbench 公式ドキュメント」をご参照ください)
説明事前に ECS インスタンスをアクティベートしてください。このトピックのテストツールは ECS にインストールされます。
テストインスタンス: 4 コアと 8 GB のメモリを持つ RDS MySQL インスタンスを 1 つ、8 コアと 16 GB のメモリを持つインスタンスを 1 つ準備します。どちらも High-availability Edition と汎用インスタンスタイプを使用し、Buffer Pool Extension (BPE) 機能を有効にします。
エディション
インスタンスタイプコード
CPU とメモリ
High-availability Edition
mysql.n2.large.xc
4 コア、8 GB メモリ
High-availability Edition
mysql.n2.xlarge.xc
8 コア、16 GB メモリ
テスト方法
このトピックでは、CentOS を例として Performance Testing を行います。他のオペレーティングシステムにインストールしてテストする必要がある場合は、「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
インスタンスの QPS パフォーマンスのテスト
パラメーターの説明
次の表に、Performance Test に関連するパラメーターを示します:
パラメーター名 | 説明 |
--tables | テーブルの数 |
--table_size | 各テーブルのエントリ数 |
--rand-type | 乱数の生成に使用される分布のタイプ |
--rand-spec-pct | 特別な値と見なされる特別な乱数の割合 |
--threads | 同時スレッドの数 |
--time | テストの期間。単位: 秒 |
読み取りパフォーマンスのテスト
次のコマンドを実行して、1 テーブルあたり 4000 万行の 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
書き込みパフォーマンスのテスト
次のコマンドを実行して、1 テーブルあたり 4000 万行の 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 テーブルあたり 4000 万行の 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 インスタンスのテスト結果を示しています:
読み取りパフォーマンス: Buffer Pool Extension (BPE) を有効にする前後で、QPS パフォーマンスはほぼ同じです。
書き込みパフォーマンス: Buffer Pool Extension (BPE) を有効にすると、QPS パフォーマンスが 30% 向上します。
読み取りおよび書き込みパフォーマンス: Buffer Pool Extension (BPE) を有効にすると、QPS パフォーマンスが 26% 向上します。

次のリストは、RDS High-availability Edition を実行し、8 コアと 16 GB のメモリを備えた汎用インスタンスタイプを使用する標準 RDS インスタンスのテスト結果を示しています:
読み取りパフォーマンス: Buffer Pool Extension (BPE) を有効にすると、QPS パフォーマンスが 80% 向上します。
書き込みパフォーマンス: Buffer Pool Extension (BPE) を有効にすると、QPS パフォーマンスが 33% 向上します。
読み取りおよび書き込みパフォーマンス: Buffer Pool Extension (BPE) を有効にすると、QPS パフォーマンスが 103% 向上します。
