mysqlslapはMySQL専用の簡易な負荷測定ツールです。MySQL 5.1.4からは標準で提供されているため、これ以降のバージョンがインストールされていれば追加のソフトウェアをインストールすることなく実行できます。またmysqlslap自身はMySQLのクライアントとして動作するため、サーバーのバージョンが5.0以下でも動作します。
# mysqlslap --version
mysqlslap: unknown variable 'default-character-set=utf8'
そのままではunknown variable 'default-character-set=utf8'というエラーになったので、
# mysqlslap --no-defaults --version
mysqlslap Ver 1.0 Distrib 5.5.8, for Linux (x86_64)
--no-defaultsオプションを付けて設定ファイルに書かれたデフォルトをスキップします。--no-defaultsオプションは先頭に書かないといけないようです。
# mysqlslap
--no-defaults
--concurrency=50
--iterations=1
--number-int-cols=2
--number-char-cols=3
--auto-generate-sql
--engine=innodb
--auto-generate-sql-add-autoincrement
--auto-generate-sql-load-type=key
--auto-generate-sql-write-number=100000
--number-of-queries=300000
--host=192.168.10.19
--port=3306
--user=root
--password=foobar
それでは早速、mysqlslapコマンドを実行してみましょう。リモートホストに接続して、50クライアントから計30万回のSELECT文を実行するベンチマークです。検索するテーブルには事前に10万レコードを格納し、主キーで検索しています。
ここでは読みやすいように改行していますが、実行するときは一行で記述してください。それぞれのオプションの詳細は後ほど説明します。
mysqlslap: Cannot drop database 'mysqlslap' ERROR : Access denied for user 'test'@'%' to database 'mysqlslap'
mysqlslapコマンドを実行するとmysqlslapという名前のデータベースを作成します(すでに存在すれば、いったん削除してから作成します)。このとき、実行ユーザーに必要な権限がないとエラーになります。
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 33.248 seconds
Minimum number of seconds to run all queries: 33.248 seconds
Maximum number of seconds to run all queries: 33.248 seconds
Number of clients running queries: 50
Average number of queries per client: 6000
実行結果です。30万回のSELECT文÷33.248秒≒1秒あたり9023回のSELECT文を実行できることになります。
# mysqlslap
...(略)...
--host=127.0.0.1
...(略)...
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 31.827 seconds
Minimum number of seconds to run all queries: 31.827 seconds
Maximum number of seconds to run all queries: 31.827 seconds
Number of clients running queries: 50
Average number of queries per client: 6000
ローカルホストで同じベンチマークを実行してみましたが、実行時間はほとんど変わりませんでした。ローカルネットワークの通信速度はボトルネックではないようです。
# mysqlslap
...(略)...
--auto-generate-sql-write-number=10000
...(略)...
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 7.133 seconds
Minimum number of seconds to run all queries: 7.133 seconds
Maximum number of seconds to run all queries: 7.133 seconds
Number of clients running queries: 50
Average number of queries per client: 6000
事前に格納するレコードを10万件から1万件に減らすと、実行時間が大幅に短縮されました。