MySQLでmysqlslapを使って負荷テストをしてみる
mysqlslapとは、MySQLが公式で提供サポートしている負荷ツールです。今回は、このツールを使って検証してみます。
slapは平手打ちという意味もありますので、ひたすら叩くという意味合いで付いたんでしょうか。
mysqlslapをインストールする
下記コマンドでインストールします。
$ yum install mysql-bench
mysqlslapを実行する
下記のようにすることで実行することができます。下記のサンプルは、ローカルでrootユーザで実行しています。
$ mysqlslap \
--host=localhost \
--port=3306 \
--user=root \
--no-defaults \
--engine=innodb \
--iterations=10 \
--concurrency=100 \
--auto-generate-sql \
--auto-generate-sql-add-autoincrement \
--auto-generate-sql-load-type=mixed \
--auto-generate-sql-write-number=1000 \
--number-of-queries=100 \
実行すると、下記のような結果が返ってきました。
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 1.809 seconds
Minimum number of seconds to run all queries: 1.651 seconds
Maximum number of seconds to run all queries: 1.114 seconds
Number of clients running queries: 100
Average number of queries per client: 1000
サーバのスペック差はありますが、最小値と最大値の差が少なく安定的に捌けていますので、概ね問題なく捌けていそうです。負荷テスト時には、様々なケースを想定したシナリオを作るケースがあるかと思いますので、オプションについて、説明していきます。
オプションコマンドについての解説
-
–no-defaults
デフォルト値を読み込まなくなります。 -
–concurrency
参照のSELECTクエリ実行時に、負荷をかけるクライアント数を設定します。 -
–iterations
負荷テストをする回数を指定します。何回か負荷をかけて、タイミング的な違いにならないように、平均値をとるために設定します。10回で設定しておくのが良さそうです。 -
–number-int-cols
intカラムの数を指定します。50くらいの値が推奨値になります。 -
–number-char-cols
varcharのカラムの数を指定します。50くらいの値が推奨値になります。 -
–engine
検証するストレージエンジンを指定できます。ほとんどの場合は、InnoDBもしくはMyISAMで事足りそうです。 -
–auto-generate-sql
負荷テスト用のSQLを自動生成してくれます。 -
–auto-generate-sql-load-type
クエリのタイプを指定します。readと書くと参照クエリのみ、writeはinsertクエリ、keyは主キーの読み取り、mixedは参照クエリと更新クエリを半々にして実行してくれます。 -
–auto-generate-sql-write-number
スレッド毎のinsertクエリの発行数です。特に指定がなければ、デフォルトで100になります。 -
–number-of-queries
各クライアントで実行するクエリの数を指定します。 -
–host
負荷テスト対象ホストを指定します。 -
–port
コネクションに使うポート番号を指定します。 -
–user
MySQLのユーザ名を指定します。 -
–create-schema
テストを実行するDB名を指定できます。実行後は、データは空になります。 -
–password
MySQLに接続するユーザのパスワードを指定します。 -
-–no-drop
通常だと、テスト時にテスト用データベースを作って、テストして、終わったら消すいうことをしていますが、削除したくない場合は、このオプションを入れることで回避することができます。