LoginSignup
7
7

More than 3 years have passed since last update.

mysqlslapによるmysqlベンチマーク解説

Last updated at Posted at 2019-05-18

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
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7