このトピックでは、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 vCPU、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インスタンスの作成」をご参照ください。
説明PolarDB-XインスタンスとECSインスタンスが同じVPCにあることを確認します。
インスタンスにデータベースを作成します (この例では、データベース名はsbtestです) 。 詳細については、「データベースの作成」をご参照ください。
CREATE DATABASE sbtest;
インスタンスパラメーターの変更
説明ストレステストで最適なパフォーマンスを実現するには、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 install
synben -- 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='dbpartition by hash(id)' --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エラーコードなど、無視するMySQLエラーコード。
range-size: クエリが実行される範囲に基づく範囲。
oltp_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 run
oltp_read_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 run
oltp_read_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 run
oltp_update_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 run
oltp_update_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 run
oltp_write_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 | 201462.73 |
4C32G * 4 | 1000 | 324683.03 |
8C64G * 2 | 1000 | 308174.91 |
8C64G * 4 | 2000 | 635865.65 |
read_only
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 62446.59 |
4C32G * 4 | 1000 | 94930.57 |
8C64G * 2 | 1000 | 88487.24 |
8C64G * 4 | 2000 | 162330.95 |
read_write
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 43098.16 |
4C32G * 4 | 600 | 68750.24 |
8C64G * 2 | 600 | 57730.62 |
8C64G * 4 | 600 | 111261.22 |
update_index
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 49530.87 |
4C32G * 4 | 600 | 86850.17 |
8C64G * 2 | 600 | 65750.01 |
8C64G * 4 | 1000 | 137154.16 |
update_non_index
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 400 | 50627.05 |
4C32G * 4 | 1000 | 90555.72 |
8C64G * 2 | 1000 | 68838.02 |
8C64G * 4 | 1000 | 137071.73 |
write_only
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 400 | 38636.02 |
4C32G * 4 | 600 | 70974.3 |
8C64G * 2 | 600 | 52344.94 |
8C64G * 4 | 600 | 101282.38 |
MySQL 8.0
PolarDB-Xバージョン: polardb-2.4.0_5.4.19-20240610_xcluster8.4.19-20240523。 詳細については、「リリースノート」をご参照ください。
次のテスト結果では、QPS値を使用してデータベースのパフォーマンスを測定します。
point_select
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 1000 | 166590.48 |
4C32G * 4 | 1000 | 288516.53 |
8C64G * 2 | 1000 | 350510.72 |
8C64G * 4 | 2000 | 637414.68 |
read_only
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 59770.01 |
4C32G * 4 | 1000 | 71259.87 |
8C64G * 2 | 1000 | 69829.69 |
8C64G * 4 | 2000 | 128366.39 |
read_write
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 56134.05 |
4C32G * 4 | 600 | 55817.45 |
8C64G * 2 | 600 | 60482.86 |
8C64G * 4 | 600 | 92855.15 |
update_index
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 600 | 37474.15 |
4C32G * 4 | 600 | 57344.42 |
8C64G * 2 | 600 | 55856.94 |
8C64G * 4 | 1000 | 87618.81 |
update_non_index
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 400 | 38017.57 |
4C32G * 4 | 1000 | 60779.25 |
8C64G * 2 | 1000 | 58065.02 |
8C64G * 4 | 1000 | 91060.65 |
write_only
インスタンス仕様 | 同時スレッド数 | QPS |
4C32G * 2 | 400 | 29476.72 |
4C32G * 4 | 600 | 47558.73 |
8C64G * 2 | 600 | 41032.61 |
8C64G * 4 | 600 | 65794.57 |