mysqlslap で MySQL の負荷テストをする方法

More than 3 years have passed since last update.

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


参考