ここでは、SysBench を使用して、ApsaraDB for PolarDB MySQL クラスターのオンライントランザクション処理 (OLTP) パフォーマンスをテストする方法について説明します。
テストツール
SysBench は、負荷の高いデータベースを実行するシステムのコア動作パラメーターを評価するために使用される、モジュラー、クロスプラットフォーム、かつマルチスレッドのベンチマークツールです。
SysBench は、複雑なベンチマーク設定を設定したり、データベースエンジンをインストールしたりすることなく、データベースのパフォーマンスをテストできるように設計されています。
テスト環境
- Elastic Compute Service (ECS) インスタンスと ApsaraDB for PolarDB MySQL クラスターがテストに使用され、同じリージョンおよびゾーンにデプロイしておく必要があります。
このテストでは、どちらも中国 (杭州) リージョンのゾーン I に配置されています。
- ECS インスタンスと ApsaraDB for PolarDB MySQL クラスターの両方に対して、ネットワークタイプとして VPC を選択します。
注 ECS インスタンスと ApsaraDB for PolarDB MySQL クラスターが同じ VPC ネットワークに接続されていることを確認してください。
- テスト用の ApsaraDB for PolarDB MySQL クラスターは次のとおりです。
- ノードの仕様は polar.mysql.x4.large (4 コア、16 GB) です。
- 読み取り専用、書き込み専用、読み取り/書き取りのパフォーマンスは、1 つのプライマリノードと 1 つの読み取り専用ノードから構成される 2 ノードクラスターを使用してテストします。
マルチノードクラスターのパフォーマンスは、1 つのプライマリノードと 1〜8 つの読み取り専用ノードから構成される 2〜9 ノードクラスターを使用してテストされます。
- クラスターエンドポイントを使用してクラスターに接続します。 クラスターエンドポイントを照会する方法については、「エンドポイントの表示」をご参照ください。
- テスト用の ECS インスタンスは次のとおりです。
- インスタンスタイプは ecs.c5.4xlarge です。
- インスタンスで使用されるイメージは CentOS 7.0 (64 ビット) です。
テストシナリオ
異なる仕様の ApsaraDB for PolarDB MySQL クラスターのパフォーマンスを次の観点からテストします:読み取り専用パフォーマンス、書き込み専用パフォーマンス、読み取り/書き込みパフォーマンス、および複数の読み取り専用ノードの場合の読み取り専用パフォーマンス。
パフォーマンスの測定には、以下のメトリクスが使用されます。
- 1 秒あたりのトランザクション (TPS):1 秒あたりに ApsaraDB for PolarDB MySQL クラスターで 実行されたトランザクションの数。 コミットされたトランザクションの数のみがカウントされます。
- 1 秒あたりのクエリ数 (QPS):1 秒あたりに ApsaraDB for PolarDB MySQL クラスターで 実行される INSERT、SELECT、UPDATE、DELETE
文などの SQL 文 の数。
SysBench のインストール
- ECS インスタンスで以下のコマンドを実行し、SysBench をインストールします。
yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql
git clone https://github.com/akopytov/sysbench.git
## Download SysBench from GitHub
cd sysbench
## Open the SysBench directory
git checkout 1.0.18
## Switch to the SysBench version 1.0.18
./autogen.sh
## Run autogen.sh
./configure --prefix=/usr --mandir=/usr/share/man
make
## Compile SysBench.
make install
- 次のコマンドを実行して SysBench クライアントを設定し、クロスコアコンテキストスイッチを最小限に抑え、利用可能なすべての CPU コアを使用して、データを処理できるようにします。
デフォルトでは、2 つの CPU コアが使用されます。
sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff>$x/rps_cpus; done'
注 ffffffff はデータの処理に 32 コアが使用されていることを示します。 必要に応じてコマンドを変更します。 たとえば、ECS インスタンスに 8 つのコアがある場合は、ff
と入力します。
sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries"
sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"
sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"
テスト手順
- ApsaraDB for PolarDB MySQL クラスターのクラスターエンドポイントとポートを照会します。 詳細については、「エンドポイントの表示」をご参照ください。
- ECS インスタンスで次のコマンドを実行して、ApsaraDB for PolarDB MySQL クラスターに testdb という名前のデータベースを作成します。
mysql -h XXX -P XXX -u XXX -p XXX -e 'create database testdb'
注 このコマンドと後続のコマンドの 4 つの XXX を、それぞれ ApsaraDB for PolarDB MySQL クラスターのクラスターエンドポイント、ポート番号、ユーザー名、およびパスワードに置き換えます。
パラメーター |
説明 |
-h |
ApsaraDB for PolarDB MySQL クラスターのクラスターエンドポイント。 |
-P |
ApsaraDB for PolarDB MySQL クラスターのポート番号。 |
-u |
ApsaraDB for PolarDB MySQL クラスター接続に使用するユーザー名。 |
-p |
ユーザーのパスワード。 |
- SysBench を使用して、2 ノードの ApsaraDB for PolarDB MySQL クラスターの読み取り専用パフォーマンスをテストします。 このプロセスは全体で
10 分かかります。
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_only prepare
## Prepare test data
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 oltp_read_only run
## Run workloads
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 oltp_read_only cleanup
## Clear temporary data
- SysBench を使用して、2 ノードの ApsaraDB for PolarDB MySQL クラスターの書き込み専用パフォーマンスをテストします。 このプロセスは全体で
10 分かかります。
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_write_only prepare
## Prepare test data
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --report-interval=1 oltp_write_only run
## Run workloads
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 oltp_write_only cleanup
## Clear temporary data
- SysBench を使用して、2 ノードの ApsaraDB for PolarDB MySQL クラスターの読み取り/書き込みパフォーマンスをテストします。 このプロセスは全体で
10 分かかります。
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 oltp_read_write prepare
## Prepare test data
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 —report-interval=1 oltp_read_write run
## Run workloads
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 oltp_read_write cleanup
## Clear temporary data
- SysBench を使用して、2 ノード、3 ノード、4 ノード、5 ノード、6 ノード、7 ノード、8 ノード、および 9 ノードの ApsaraDB for PolarDB
MySQL クラスターの読み取り専用パフォーマンスをテストします。
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 oltp_read_only prepare
## Prepare test data
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 —report-interval=1 oltp_read_only --db-ps-mode=disable --skip-trx=1 run
## Run workloads
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 oltp_read_only cleanup
## Clear temporary data