mysqlslap で MySQL の負荷テストをする方法
mysqlslap は MySQL の負荷テストに使えるツールです。MySQL >= 5.1.4 からはデフォルトで提供されています。
テスト中は mysqlslap
という DB を自動で作って、そこにクエリを投げまくります。
以下に基本的な使い方をメモしておきます。
使い方
mysqlslap -?
で詳しいヘルプが見られます。典型的な例は下記。
mysqlslap \
--no-defaults \
--concurrency=50 \
--iterations=1 \
--number-int-cols=2 \
--number-char-cols=3 \
--engine=innodb \
--auto-generate-sql \
--auto-generate-sql-add-autoincrement \
--auto-generate-sql-load-type=key \
--auto-generate-sql-write-number=1000 \
--number-of-queries=100000 \
--host=localhost \
--port=3306 \
--user=root \
--csv=/tmp/bench_result.csv
パラメータ | 意味 |
---|---|
no-defaults | my.cnf に書かれたデフォルト値を無視する。このオプションは先頭に付ける必要がある |
concurrency | 同時に接続してくるクライアントの数 |
iterations | テストの試行回数 |
number-int-cols | テストテーブルに作る INT 型カラムの数 |
number-char-cols | テストテーブルに作る VARCHAR 型カラムの数 |
engine | 使用する DB エンジン |
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 | 各クライアントが投げるクエリの上限数。正確にこの値にはならない |
host | ホスト |
port | ポート番号 |
user | ベンチマークを実行するユーザー。DB 作成権限が無いユーザーを指定するとテストできないので注意! |
csv | 結果を CSV 形式で取得したい時は、ここに出力先のパスを書く |
結果は以下のように出力されます。
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 16.086 seconds
Minimum number of seconds to run all queries: 16.086 seconds
Maximum number of seconds to run all queries: 16.086 seconds
Number of clients running queries: 50
Average number of queries per client: 2000