MySQL
mysqlslap

MySQLクライアント負荷エミュレーション mysqlslap を使う

More than 3 years have passed since last update.


mysqlslap

MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.15 mysqlslap — クライアント負荷エミュレーション


mysqlslapはMySQLサーバのクライアント負荷をエミュレートし、各ステージのタイミングを報告する診断プログラムです。サーバにたいして複数のクライアントがアクセスしているかのように作動します。mysqlslapはMySQL 5.1.4.から提供されています。


MySQLのパフォーマンスを測定する場合に、mysqlslapはとても便利です。MySQLを使用するシステムが増えてきているのか、毎年 mysqlslap を使って測定している気がします。


インストール

MySQLがインストールされていれば、標準でインストールされます(MySQL 5.1.4以上)

MySQLサーバ上で実行する上では、特に問題ないでしょう。しかし、負荷テストを行う場合、APサーバ等リモートからも mysqlslap を実行したい場合があります。

その場合は、別途インストールしましょう。

sudo yum install -y mysql-bench


実行する

mysqlslap \

--no-defaults \
--concurrency=50 \
--iterations=10 \
--engine=innodb \
--auto-generate-sql \
--auto-generate-sql-add-autoincrement \
--auto-generate-sql-load-type=mixed \
--auto-generate-sql-write-number=1000 \
--number-of-queries=100000 \
--host=localhost \
--port=3306 \
--user=root

Benchmark

Running for engine innodb
Average number of seconds to run all queries: 9.451 seconds
Minimum number of seconds to run all queries: 9.288 seconds
Maximum number of seconds to run all queries: 9.704 seconds
Number of clients running queries: 50
Average number of queries per client: 2000


オプション

ここでは、よく使うオプションのみ紹介します。

すべてのオプションは公式ページで確認してみてください。

オプション
説明

--no-defaults
ディフォルト値を読み込まない

--concurrency
SELECTステートメントを発行している際、シミュレートするクライアントの数

--iterations
実行するテストの回数

--number-int-cols
使用するINTカラムの数 --auto-generate-sqlが特定されている場合(50くらいが限界)

--number-char-cols
使用するVARCHARカラムの数 --auto-generate-sqlが特定されている場合(50くらいが限界)

--engine
テーブル作成の際使用するストレージエンジン(innodb,myisam)

--auto-generate-sql
ファイルやコマンドオプションを介して提供されていない場合、SQLステートメントを自動的に生成します

--auto-generate-sql-add-autoincrement
auto_incrementのカラムを追加

--auto-generate-sql-load-type
クエリのタイプ(mixed

--auto-generate-sql-write-number
スレッド毎の INSERT 文の発行数。デフォルトは 100

--number-of-queries
各クライアントをこのクエリの数に限定します。このオプションはMySQL 5.1.5.で追加されました

--host
与えられたホスト上でMySQLサーバに接続します

--port
コネクションに使用するTCP/IPポート番号です

--user
サーバに接続する際使用するMySQLユーザ名です

--csv
カンマによって分けられた値のフォーマットで出力を生成します。出力は名づけられたファイルか、ファイルが提供されていない場合標準出力に向かいます。このオプションはMySQL 5.1.5.で追加されました。

--create-schema
テストを実行するスキーマ。このオプションはMySQL 5.1.5.で追加されました

--delimiter
ファイルかコマンドオプションを介して提供されたSQLステートメントで使用するデリミタで

--only-print
データベースに接続しないでください。mysqlslapは実行されるべきであったことだけプリントします。このオプションはMySQL 5.1.5.で追加されました

--password
サーバに接続する際使用するパスワードです。ショートオプションフォーム(-p)を使用した場合、オプションとパスワードの間にスペースを置くことはできません。password値を --passwordあるいは-pオプションをコマンドライン上で省いた場合、ここで求められます

-–no-drop
プログラムの終了時、作成したスキーマを削除しません


サンプル

50スレッド 1000行データ 1000クエリ read(テーブルスキャン)

mysqlslap \

--no-defaults --auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement \
--host=localhost --port=3306 -u root \
--number-int-cols=10 \
--number-char-cols=10 \
--iterations=10 \
--concurrency=50 \
--auto-generate-sql-write-number=1000 \
--number-of-queries=1000 \
--auto-generate-sql-load-type=read

50スレッド 1000行データ 1000クエリ write(テーブルへの挿入)

mysqlslap \

--no-defaults --auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement \
--host=localhost --port=3306 -u root \
--number-int-cols=10 \
--number-char-cols=10 \
--iterations=10 \
--concurrency=50 \
--auto-generate-sql-write-number=1000 \
--number-of-queries=1000 \
--auto-generate-sql-load-type=write

50スレッド 1000行データ 1000クエリ key(主キー読み取り)

mysqlslap \

--no-defaults --auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement \
--host=localhost --port=3306 -u root \
--number-int-cols=10 \
--number-char-cols=10 \
--iterations=10 \
--concurrency=50 \
--auto-generate-sql-write-number=1000 \
--number-of-queries=1000 \
--auto-generate-sql-load-type=key

50スレッド 1000行データ 1000クエリ mixed(挿入とテーブルスキャンを半々)

mysqlslap \

--no-defaults --auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement \
--host=localhost --port=3306 -u root \
--number-int-cols=10 \
--number-char-cols=10 \
--iterations=10 \
--concurrency=50 \
--auto-generate-sql-write-number=1000 \
--number-of-queries=1000 \
--auto-generate-sql-load-type=mixed

50スレッド 1000行データ 1000クエリ update(更新)

mysqlslap \

--no-defaults --auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement \
--host=localhost --port=3306 -u root \
--number-int-cols=10 \
--number-char-cols=10 \
--iterations=10 \
--concurrency=50 \
--auto-generate-sql-write-number=1000 \
--number-of-queries=1000 \
--auto-generate-sql-load-type=update


まとめ

MySQL限定ですが、リード・ライトのベンチマークを測るのに十分使えますね。