このトピックでは、MySQL 5.7およびMySQL 8.0のPolarDB-XでのSysbenchテストの設計、プロセス、および結果について説明します。
背景情報
Sysbenchは、複数のスレッドを使用して、さまざまなプラットフォーム間でCPU、メモリ、スレッド、I/Oなどのデータベースのパフォーマンスをテストできる、オープンソースのモジュラーツールです。 このトピックでは、さまざまなシナリオでPolarDB-X Sysbenchテストのパフォーマンスを検証します。
テストデザイン
量のテストデータ
このトピックで説明されているSysbenchテストの結果は、16の表に基づいて得られます。 各テーブルには1,000万行のデータが含まれています。
テストのインスタンス仕様
インスタンス仕様
ノード数
4C32G
2
4C32G
4
8C64G
2
8C64G
4
ストレステスト用ECSインスタンスタイプ
ecs.g7ne.8xlarge (32 CPUコア、128 GBのメモリ)
手順
ストレステスト用のElastic Compute Service (ECS) インスタンスを作成します。
データの準備とストレステストの実行に使用されるECSインスタンスを作成します。 高仕様のPolarDB-Xインスタンスをテストする際のパフォーマンスのボトルネックを防ぐため、32 vCPUと128 GBのメモリを備えたECSインスタンスを作成することを推奨します。
説明ECSインスタンスは、仮想プライベートクラウド (VPC) にデプロイする必要があります。 後で使用するために、VPCの名前とIDを記録します。 後続の手順で説明するすべてのデータベースインスタンスをVPCにデプロイする必要があります。
ストレステスト用のPolarDB-Xインスタンスを作成します。
PolarDB-Xインスタンスを作成します。 ビジネス要件に基づいて、MySQL 5.7またはMySQL 8.0データベースエンジンを選択します。 PolarDB-Xインスタンスの作成方法については、「PolarDB-Xインスタンスの作成」をご参照ください。
インスタンスにデータベースを作成します (この例では、データベース名はsbtestです) 。 詳細については、「データベースの作成」をご参照ください。
CREATE DATABASE sbtest MODE = 'auto';
インスタンスパラメーターの変更
説明ストレステストで最適なパフォーマンスを実現するには、PolarDB-Xインスタンスの計算ノードの特定のパラメーターを変更します。
ENABLE_COROUTINEパラメーターをtrueに設定し、XPROTO_MAX_DN_CONCURRENTパラメーターとXPROTO_MAX_DN_WAIT_CONNECTIONパラメーターを4000に設定します。 詳細については、「パラメーター設定」をご参照ください。
コマンドラインクライアントを使用してPolarDB-Xインスタンスに接続します。 次に、同じセッションで次のSQL文を実行して、ロギングとCPU統計サンプリングを無効にします。
set global RECORD_SQL=false; set global MPP_METRIC_LEVEL=0; set global ENABLE_CPU_PROFILE=false; set global ENABLE_TRANS_LOG=false;
ストレステスト用のデータを準備します。
ストレステストツールパッケージbenchmarksql.tar.gzをダウンロードし、次のコマンドを実行して解凍します。
tar xzvf sysbench.tar.gz cd sysbench/次のコマンドを実行して、依存関係をインストールしてコンパイルします。
yum -y install make automake libtool pkgconfig libaio-devel mysql-devel ./autogen.sh ./configure make -j make installsynben -- versionコマンドを実行します。sysbench 1.1.0が返された場合、ストレステストツールがインストールされます。GitHubからオープンソースのSysbenchをダウンロードすることもできます。 詳細については、『GitHubのsysbench』をご参照ください。
ストレステスト用のデータを設定します。
設定ファイルsysb.confを作成し、設定ファイルにPolarDB-X接続情報を入力します。 次の例は、設定ファイルの内容を示しています。 例の後のこのセクションでは、構成ファイルのパラメータについて説明します。
mysql-host='{HOST}' mysql-port='{PORT}' mysql-user='{USER}' mysql-password='{PASSWORD}' mysql-db='sbtest' db-driver='mysql' percentile='95' histogram='on' report-interval='1' time='60' rand-type='uniform'設定ファイル内のパラメータ:
パーセンタイル: 応答時間のサンプリングに基づくパーセンタイル。
histogram: 応答時間分布のヒストグラムを表示するかどうかを指定します。
report-interval: リアルタイムの結果が表示される間隔。 (秒単位)。
time: ストレステストの期間。 (秒単位)。
rand-type: 乱数の生成に使用される分布タイプ。
ストレステストデータをインポートします。
sysbench --config-file='sysb.conf' --create-table-options='single locality="balance_single_table=on"' --tables='16' --table-size='10000000' --threads='16' --auto_inc='off' oltp_point_select prepareコマンドのパラメータ:
config-file: 共通設定ファイルを指定します。
create-table-options: テーブルの作成に使用するモードを指定します。
tables: テーブルの数を指定します。
table-size: テーブルに含めることができるデータの量を指定します。
threads: データのインポートに使用される同時スレッドの数を指定します。
auto_inc: auto_incrementを使用するかどうかを指定します。
ストレステストを実行します。
次のコマンドを実行して、Sysbenchで定義されている6つのシナリオでテストを実行します。 最初のストレステストの期間を長くすることをお勧めします。
説明コマンドのパラメータ:
db-ps-mode: 準備モードを有効にするかどうかを指定します。
mysql-ignore-errors: ロックの競合によって発生した一部のMySQLエラーコードが無視されることを指定します。
range-size: クエリを実行する範囲に基づいて範囲を指定します。
point_select:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={Number of concurrent threads} oltp_point_select runread_only:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --range-size=5 --threads={Number of concurrent threads} oltp_read_only runread_write:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --range-size=5 --threads={Number of concurrent threads} oltp_read_write runupdate_index:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={Number of concurrent threads} oltp_update_index runupdate_non_index:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={Number of concurrent threads} oltp_update_non_index runwrite_only:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={Number of concurrent threads} oltp_write_only run
テスト結果
MySQL 5.7
PolarDB-Xバージョン: polardb-2.4.0_5.4.19-20240610_xcluster5.4.19-20240527。 詳細については、「リリースノート」をご参照ください。
次のテスト結果では、QPS値を使用してデータベースのパフォーマンスを測定します。
point_select

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 1000 | 194921.53 |
4C32G * 4 | 1000 | 355299.81 |
8C64G * 2 | 1000 | 304538.44 |
8C64G * 4 | 2000 | 618634.19 |
読み取り_のみ

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 191075.61 |
4C32G * 4 | 1000 | 308160.47 |
8C64G * 2 | 1000 | 308352.62 |
8C64G * 4 | 2000 | 598847.81 |
read_write

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 102279.28 |
4C32G * 4 | 600 | 161648.89 |
8C64G * 2 | 600 | 142095.41 |
8C64G * 4 | 600 | 243955.73 |
update_index

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 50092.01 |
4C32G * 4 | 600 | 89559.24 |
8C64G * 2 | 600 | 65857.4 |
8C64G * 4 | 1000 | 130311.38 |
update_non_インデックス

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 400 | 50393.43 |
4C32G * 4 | 1000 | 92495.24 |
8C64G * 2 | 1000 | 69030.37 |
8C64G * 4 | 1000 | 138283.81 |
write_のみ

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 400 | 52322.07 |
4C32G * 4 | 600 | 81170.89 |
8C64G * 2 | 600 | 69120.16 |
8C64G * 4 | 600 | 114337.76 |
MySQL 8.0
PolarDB-Xバージョン: polardb-2.4.0_5.4.19-20240610_xcluster8.4.19-20240523。 詳細については、「リリースノート」をご参照ください。
次のテスト結果では、QPS値を使用してデータベースのパフォーマンスを測定します。
point_select

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 1000 | 165611.83 |
4C32G * 4 | 1000 | 309981.94 |
8C64G * 2 | 1000 | 345505.5 |
8C64G * 4 | 2000 | 618638.91 |
read_only

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 167945.12 |
4C32G * 4 | 1000 | 296882.66 |
8C64G * 2 | 1000 | 301085.34 |
8C64G * 4 | 2000 | 534553.26 |
read_write

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 78310 |
4C32G * 4 | 600 | 113646.43 |
8C64G * 2 | 600 | 119788.57 |
8C64G * 4 | 600 | 179227.38 |
update_index

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 38220.55 |
4C32G * 4 | 600 | 63354.87 |
8C64G * 2 | 600 | 55573.63 |
8C64G * 4 | 1000 | 90181.68 |
update_non_index

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 400 | 37439.38 |
4C32G * 4 | 1000 | 66362.21 |
8C64G * 2 | 1000 | 63527.22 |
8C64G * 4 | 1000 | 92856.59 |
write_のみ

インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 400 | 37884.63 |
4C32G * 4 | 600 | 52481.99 |
8C64G * 2 | 600 | 58711.55 |
8C64G * 4 | 600 | 74967.45 |