mysqlslapとは,MySQLが公式でサポートしている 負荷エミュレーションクライアントです。
公式ドキュメント:https://dev.mysql.com/doc/refman/5.6/ja/mysqlslap.html
mysqlslapインストール
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
※ユーザやパスワード,ポートやホストの指定といった設定は,mysqlコマンドクライアントと同じものが使えます。
そのため,アプリケーションサーバからMySQLサーバへの負荷ベンチを取りたい場合にも使うことができます。
結果例
Benchmark
Running for engine innodb #DBエンジン
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 #クライアントが発行したSQLの数
よく使うオプション
オプション:説明
--no-defaults:ディフォルト値を読み込まない
--concurrency:SELECTステートメントを発行している際、シミュレートするクライアントの数
--iterations:実行するテストの回数(同じテストを繰り返して平均値をとるため。10回くらいが妥当)
--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:クエリのタイプ。
※read(テーブルスキャン)、write(テーブルへの挿入)、 key(主キー読み取り)、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:プログラムの終了時、作成したスキーマを削除しません
実行例
# 実行例1
#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
# 実行例2
#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
# 実行例3
#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
# 実行例4
#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
# 実行例5
#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