今回はsysbench 1.0を使ってMySQLの負荷テストする方法を紹介したいと思います。
第26回 SysBenchを使ってMySQLの負荷テストをする でsysbenchについてはすでに紹介していますので、sysbenchの概要などはこちらの記事をご参照ください。以前の記事ではsysbenchのバージョンは0.4.12であり、最新のsysbenchはオプションやコマンドなどが若干異なっています。そのため、以前の記事のアップデート版として最新のsysbenchで負荷テストする方法を紹介します。
インストール方法
各OSごとのインストール方法はInstalling from Binary Packagesをご参照ください。今回はCentOS7にsysbenchをインストールしてみます。
2022/1現在の最新バージョン1.0.20がインストールされました。
sysbenchの構文
sysbenchの一般的なコマンドライン構文は次のとおりです。
- オプション…接続先のMySQLの情報やスレッド数などオプションを指定
- テスト名…同梱されたテストシナリオ、または自作したテストシナリオを指定
- コマンド…アクションを指定
- prepare …テーブル作成やデータ投入などテスト前の準備を実行
- run …指定したテスト名に基づくテストを実際に実行
- cleanup …一時データを作成するテストでのテスト実行後に一時データを削除
- help …指定したテスト名も基づくhelp情報を表示
sysbenchを実行する前の準備
sysbenchを実行する前に、sysbench用のデータベースとユーザを作成します。
mysqlコマンドラインクライアントでログインして、以下のCREATE文を実行してデータベースを作成します。
続けて、ユーザの作成です。sbtestデータベースだけに権限を与えるようにすれば良いので、以下のようなコマンドになります。
Password1!の部分はデータベースのポリシーに合わせて適切な値に変更して実行してください。またsysbenchに必要なデータベースはsbtestだけなので、必要な権限だけを与えましょう。
続いて、負荷テストを行うためにテーブル作成とデータを作成します。ここはsysbenchが自動作成してくれます。オプションとテスト名oltp_common
、コマンドprepare
を指定して実行することで、sysbench実行のための準備をしてくれます。
今回は3つのテーブルを作成し、テーブルあたり10000行のデータを準備します。
以下のようなsbtest
+連番のテーブルが作成されます。
オプションについて
--mysql-host
…MySQLのホスト名を指定(デフォルト localhost)
--mysql-port
…MySQLのポートを指定(デフォルト 3306)
--mysql-db
…MySQLのデータベース名を指定(デフォルト sbtest)
--mysql-user
…MySQLのユーザ名を指定(デフォルト sbtest)
--mysql-password
…MySQLのパスワードを指定(デフォルト なし)
--tables
…作成するテーブル数を指定(デフォルト 1)
--table_size
…作成する1テーブルあたりの行数を指定(デフォルト 10000)
sysbenchを実行する
オプションと一般的なReadとWriteを実行するテスト名oltp_read_write
、コマンドrun
を指定して実行することで、sysbenchを実行します。今回は同時スレッド数3で10秒間テストするように設定しています。
実行完了後、以下のような結果が出力されます。
ここから負荷テストの結果が確認できます。
- Readクエリ数… read: 65758
- Writeクエリ数… write: 18788
- 1秒間あたりのクエリ発行数(QPS)…9389.40 per sec
- 1秒間あたりのトランザクション実行数(TPS)…469.47 per sec.
- トータルのクエリ発行数… total: 93940
オプションについて
--tables
…テストするテーブル数を指定(デフォルト 1)
--table_size
…テストする1テーブルあたりの行数を指定(デフォルト 10000)
--threads
…同時実行するスレッド数を指定(デフォルト 1)
--time
…テストを実行する秒数を指定(デフォルト 10)
テスト名について
sysbenchではいくつかのテスト名(テストシナリオ)が同梱されています。テストシナリオはluaスクリプトで作成されています(luaスクリプト -sysbench)。
- oltp_read_write …一般的なReadとWriteの組み合わせを実行
- oltp_read_only …Read(SELECT)のみを実行
- oltp_write_only …Write(INSERT, DELETE, UPDATE)のみを実行
- oltp_insert …INSERTのみを実行
- bulk_insert …
INSERT INTO .. VALUES (?),(?),(?)
のような BULK INSERTのみを実行
- oltp_delete …PrimaryKeyの等価比較をWHERE条件に指定したDELETEのみを実行
- oltp_point_select …PrimaryKeyの等価比較をWHERE条件に指定したSELECTのみを実行
- oltp_update_non_index …PrimaryKeyの等価比較をWHERE条件に指定したUPDATEのみを実行(更新するカラムにインデックスなし)
- oltp_update_index …PrimaryKeyの等価比較をWHERE条件に指定したUPDATEのみを実行(更新するカラムにインデックスあり)
- select_random_points …インデックス付きのカラムをIN句でWHERE条件に指定したSELECTのみ実行
- select_random_ranges …インデックス付きのカラムをBETWEEN句でWHERE条件に指定したSELECTのみ実行
まとめ
今回はsysbench1.0で負荷テストする方法について紹介しました。sysbenchは簡単にインストールや実行ができて、さまざまテストシナリオも用意されているので、性能比較の際はぜひ使ってみてください。