第23回
検証環境
今回は第23回
SysBenchとは?
SysBenchは、
SysBenchはCPUやメモリ、
ただし、
インストール方法
CentOSを利用している場合はEPELでrpmが用意されているため、
$ sudo yum install sysbench -y 読み込んだプラグイン:fastestmirror …中略… 完了しました!
以下のコマンドを入力した際にバージョン情報が表示されれば問題なくインストールが完了しています。
$ sysbench --version sysbench 0.4.12
SysBenchの使い方
SysBenchはMySQL専用のベンチマークではなく、
種類 | 説明 |
---|---|
fileio | File I/ |
cpu | CPU のベンチマーク |
memory | メモリ機能のベンチマーク |
threads | スレッドのベンチマーク |
mutex | スレッドのMutexのベンチマーク |
oltp | OLTP |
これらは以下のように、--test=
optionとして渡すことで指定することができます。たとえば、
$ sysbench --test=cpu run
実行を行うと、
sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Doing CPU performance benchmark Threads started!
続けてテストが終了すると、
Done. Maximum prime number checked in CPU test: 10000 Test execution summary: total time: 11.6803s total number of events: 10000 total time taken by event execution: 11.6772 per-request statistics: min: 1.08ms avg: 1.17ms max: 1.42ms approx. 95 percentile: 1.21ms Threads fairness: events (avg/stddev): 10000.0000/0.00 execution time (avg/stddev): 11.6772/0.00
このテストでは10000個以下の素数を数えるテストが実行されました。10000個と言うのはデフォルトの設定で--cpu-max-prime
オプションで変更可能です。Test execution summary
では実行時間が表示されていて、total time
から実行が終了するまでに約11秒かかっていることがわかります。今回は1スレッドで実行しているので、
スレッド数を増やしたい場合は--num-threads=
オプションの値を変更することで、sysbench --test=option help
とコマンドを入力すると、
たとえば次のようにoltpを入れてhelpを実行すると、
$ sysbench --test=oltp help sysbench 0.4.12: multi-threaded system evaluation benchmark oltp options: --oltp-test-mode=STRING test type to use {simple,complex,nontrx,sp} [complex] --oltp-reconnect-mode=STRING reconnect mode {session,transaction,query,random} [session] --oltp-sp-name=STRING name of store procedure to call in SP test mode [] --oltp-read-only=[on|off] generate only 'read' queries (do not modify database) [off] …省略…
SysBenchを実行する前の準備
SysBenchを実行する前に、
mysqlコマンドラインクライアントでログインして、
mysql> CREATE DATABASE sbtest; Query OK, 1 row affected (0.00 sec)
続けて、
mysql> CREATE USER sbtest@localhost; mysql> GRANT ALL PRIVILEGES ON sbtest.* TO sbtest@localhost IDENTIFIED BY 'Password1!'; Query OK, 0 rows affected, 1 warning (0.00 sec)
Password1!
の部分はデータベースのポリシーに合わせて適切な値に変更して実行してください。またSysBenchに必要なデータベースはsbtestだけなので必要な権限だけを与えましょう。
続けてSysBenchを実行する前にテーブルを作成します。といってもSysBenchで必要なテーブルやレコードに関しては自動で作成してくれるので、
$ sysbench --test=oltp --mysql-password=Password1! --db-driver=mysql prepare sysbench 0.4.12: multi-threaded system evaluation benchmark Creating table 'sbtest'... Creating 10000 records in table 'sbtest'...
sbtestテーブルが作成されテスト用の10000レコードが作成されました。このコマンドで用意されたテーブルとデータを確認してみましょう。作成されたテーブルは以下のようになってます。
$ mysql -uroot -p sbtest mysql> SHOW CREATE TABLE sbtest; +--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | sbtest | CREATE TABLE `sbtest` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `k` int(10) unsigned NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k` (`k`) ) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=latin1 | +--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
sbtestというテーブルが作成されていることが確認できました。続いて、
mysql> SELECT * FROM sbtest; +-------+---+---+----------------------------------------------------+ | id | k | c | pad | +-------+---+---+----------------------------------------------------+ | 1 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | | 2 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | | 3 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | …中略… | 9998 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | | 9999 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | | 10000 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | +-------+---+---+----------------------------------------------------+ 10000 rows in set (0.01 sec)
以上のように10000件のダミーデータが用意されていることがわかりました。これらを利用してベンチマークを行っていきます。
また今回はMySQLにデータベースやユーザを追加しましたが、--mysql-user=
オプションで別のユーザを、--mysql-db=
オプションで別のデータベースを指定して既存のユーザで実行することもできます。
SysBenchを実行する
それではSysBenchをMySQLに向けて実行をしてみましょう。以下のコマンドを実行します。
$ sysbench --num-threads=4 --test=oltp --mysql-password=Password1! --db-driver=mysql run sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 4 Doing OLTP test. Running mixed OLTP test Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases) Using "BEGIN" for starting transactions Using auto_inc on the id column Maximum number of requests for OLTP test is limited to 10000 Threads started!
--test=cpu
で実行した時と同様に、
OLTPのテストのデフォルトではトランザクションを使うように設定されていて、--oltp-test-mode=
をnontrx
に変更します。デフォルト値はcomplex
になっています。UPDATEやINSERT、--oltp-read-only=
をon
に変更するとSELECT文だけ実行されるようになります。
Done. OLTP test statistics: queries performed: read: 141456 write: 50278 other: 20104 total: 211838 transactions: 10000 (414.12 per sec.) deadlocks: 104 (4.31 per sec.) read/write requests: 191734 (7940.08 per sec.) other operations: 20104 (832.55 per sec.) Test execution summary: …省略…
データベースの性能を測るときには、
まとめ
今回はベンチマークによく使われるSysBenchというソフトウェアを紹介しました。このソフトウェアはmysqlslapとは違い、