このトピックでは、Sysbench を使用して PolarDB-X 1.0 のパフォーマンスをテストする方法について説明します。
インストール
この例では、パフォーマンス テストに Sysbench 0.5 を使用します。インストールコード:
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
前述のコードは、パフォーマンス テスト用に ECS インスタンスに Sysbench をインストールするためのものです。異なるオペレーティングシステムに Sysbench をインストールするには、Sysbench の公式ドキュメントをご参照ください。
インストールが完了すると、PolarDB-X 1.0 のパフォーマンステストで使用されるすべての組み込みベンチマークスクリプトは、/usr/local/share/sysbench ディレクトリに保存されます。これらのスクリプトは、ソースコードディレクトリ sysbench/sysbench/tests/db にもあります。
使用方法
一般的なベンチマークモデル
Sysbench は、スクリプトを使用して定義された、以下の一般的に使用されるベンチマークモデルを提供します。
ベンチマークモデル | 説明 |
bulk_insert.lua | バルクデータ挿入。 |
insert.lua | 単一値データ挿入。 |
delete.lua | データ削除。 |
oltp.lua | 読み取りと書き込みの比率が 14:4 の混合読み取り/書き込みテスト。 |
select.lua | 単純なプライマリキークエリ。 |
テーブルスキーマ
PolarDB-X 1.0 をテストするために、Sysbench テストテーブルはシャーディング構造を採用するように変更されています。
CREATE TABLE `sbtest1` (
`id` int(10) unsigned NOT NULL,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
KEY `xid` (`id`),
KEY `k_1` (`k`)
) dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 4
データベースシャードとテーブルパーティションの数は、必要に応じて調整できます。 Sysbench テストのデータ準備フェーズでは、提供されたスキーマに基づいてテーブルが自動的に生成されます。
テストコマンドとパラメーター
Sysbench ベースのベンチマークには、次の手順が含まれます。
prepare: データを準備します。
run: ベンチマークモデルを実行します。
cleanup: テストデータをクリーンアップします。
ほとんどの場合、データを準備する必要があるのは 1 回だけです。この準備済みデータに基づいて、さまざまなモデルをテストできます。
一般的に使用されるパラメーター
--oltp-tables-count=1: テーブルの数。--oltp-table-size=10000000: テーブルごとに生成される行数。--oltp-read-only=off: 読み取り専用の SQL クエリを生成するかどうかを指定します。デフォルト値: off。 on に設定すると、OLTP モデルはUPDATE、DELETE、またはINSERT文を生成しません。--oltp-skip-trx=[on|off]:BEGIN文とCOMMIT文をスキップするかどうかを指定します。デフォルト値: off。--rand-init=on: データをランダムに初期化するかどうかを指定します。offに設定すると、初期データ行の内容はプライマリキーを除いて同じになります。--num-threads=12: 同時スレッド数 (またはシミュレートされたクライアント接続数)。--report-interval=10: パフォーマンスメトリックのレポート間隔 (秒単位)。--max-requests=0: テスト中に生成されるリクエストの総数。 max-time パラメーターを使用してテスト期間を指定する場合は、このパラメーターを 0 に設定できます。--max-time=120: テストの実行時間 (秒単位)。--oltp_auto_inc=off: ID 列が自動インクリメント列かどうかを指定します。--oltp_secondary=on: プライマリキーの競合を防ぐために、ID 列を非プライマリキーとして設定するかどうかを指定します。--oltp_range_size=5: クエリ内の連続値の範囲サイズを指定します。--mysql_table_options='dbpartition by hash(id) tbpartition by hash(id) tbpartitions 2': PolarDB-X 1.0 でのテーブル作成のシャーディングポリシー
サンプルコマンド
次のコマンドを使用して、対応する操作を実行できます。
コマンドを実行する前に、手動で テストデータベースを作成 し、実際の情報に基づいて次のパラメーターを変更してください。
<user_name>: アカウント名。
<password>: アカウントパスワード。
<host>: 非公開またはパブリックエンドポイント。
<port>: 非公開またはパブリックエンドポイントに対応するポート番号。
<db_name>: データベース名。
データを準備する:
sysbench --test='/usr/local/share/sysbench/oltp.lua' --oltp-tables-count=1 --report-interval=10 --oltp-table-size=10000000 --mysql-user= --mysql-password= --mysql-table-engine=innodb --rand-init=on --mysql-host= --mysql-port= --mysql-db= --max-time=300 --max-requests=0 --oltp_skip_trx=on --oltp_auto_inc=off --oltp_secondary=on --oltp_range_size=5 --mysql_table_options='dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 2' --num-threads=200 prepareテストを実行する:
sysbench --test='/usr/local/share/sysbench/oltp.lua' --oltp-tables-count=1 --report-interval=10 --oltp-table-size=10000000 --mysql-user= --mysql-password= --mysql-table-engine=innodb --rand-init=on --mysql-host= --mysql-port= --mysql-db= --max-time=300 --max-requests=0 --oltp_skip_trx=on --oltp_auto_inc=off --oltp_secondary --oltp_range_size=5 --mysql_table_options='dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 2' --num-threads=200 run環境をクリーンアップする:
sysbench --test='/usr/local/share/sysbench/oltp.lua' --oltp-tables-count=1 --report-interval=10 --oltp-table-size=10000000 --mysql-user= --mysql-password= --mysql-table-engine=innodb --rand-init=on --mysql-host= --mysql-port= --mysql-db= --max-time=300 --max-requests=0 --oltp_skip_trx=on --oltp_auto_inc=off --oltp_secondary --oltp_range_size=5 --mysql_table_options='dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 2' --num-threads=200 cleanup