MySQL道普請便り

第26回 SysBenchを使ってMySQLの負荷テストをする

この記事を読むのに必要な時間:およそ 5 分

第23回「mysqlslapを使って負荷テストをしてみよう」では,MySQLにバンドルされているmysqlslapを使って負荷テストを行いました。今回はSysBenchというベンチマークソフトを利用して,負荷テストを行う方法を紹介していきます。

検証環境

今回は第23回「mysqlslapを使って負荷テストをしてみよう」で使用したCentOS7に,SysBenchをインストールして実行しています。MySQLのバージョンは5.7.13を使用しています。

SysBenchとは?

SysBenchは,PCやサーバのベンチマークを取るために使われるオープンソースのソフトウェアです。ライセンスにはGPLv2が採用されています。SysBenchのソースコードはGitHub上で公開されています。

SysBenchはCPUやメモリ,ファイルI/Oなどの基本的な性能を測るベンチマークだけではなく,データベースソフト向けのトランザクション性能を確認するためのOLTPというベンチマークも用意されていて,簡単に実行することができます。また,ベンチマークを実行できるDBはMySQLだけではなく,PostgreSQLやOracle Database等のデータベースでも起動用のDriverが用意されており,ベンチマークが実行できます。

ただし,今回説明に用いたyumレポジトリに用意されているものでは,PostgreSQLとMySQL用のドライバしか入っていないため,それ以外のデータベースへの実行はできません。Oracleやその他のDriverが用意されているデータベースでも実行したい場合は,ソースコードからコンパイルすることで実行できますが,今回はソースコードからインストールする方法に関しては説明を行いません。

インストール方法

CentOSを利用している場合はEPELでrpmが用意されているため,EPELを有効にすると,以下のコマンドでインストールが行えます。

$ sudo yum install sysbench -y 
読み込んだプラグイン:fastestmirror

…中略…

完了しました!

以下のコマンドを入力した際にバージョン情報が表示されれば問題なくインストールが完了しています。

$ sysbench --version
sysbench 0.4.12

SysBenchの使い方

SysBenchはMySQL専用のベンチマークではなく,一般的なベンチマークソフトとして利用できます。SysBenchには以下のような種類のベンチマークが用意されていて,それぞれベンチマークを実行することができます。

種類説明
fileioFile I/Oのテスト
cpuCPU のベンチマーク
memoryメモリ機能のベンチマーク
threadsスレッドのベンチマーク
mutexスレッドのMutexのベンチマーク
oltpOLTP(オンライントランザクション処理)に関するテストベンチマーク

これらは以下のように,コマンドを実行する際に--test=optionとして渡すことで指定することができます。たとえば,CPUのベンチマークを行いたい場合は以下のようなコマンドを実行します。

$ sysbench --test=cpu run

実行を行うと,どのような条件でベンチマークが行われているかの表示が行われます。今回は特に指定を行わなかったので,1スレッドでCPUのパフォーマンスベンチマークが開始されたという情報が表示されています。

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スレッドで実行しているので,CPUの1スレッドでの実行時間がこの値となります。

スレッド数を増やしたい場合は--num-threads=オプションの値を変更することで,指定したスレッド数実行されます。今回より早く終わるか遅くなるかでCPUの性能を簡単に比較することができます。同様に他のテストでも各種の性能を比較することができますが,ここでは説明を行いません。またテストごとのオプションを確認したい場合はsysbench --test=option helpとコマンドを入力すると,optionに指定したテストの種類に関するオプションを確認することができます。

たとえば次のようにoltpを入れてhelpを実行すると,以下のように各種オプションと指定できる値が書かれたヘルプが表示されます。説明文の最後に書かれている[]で囲まれた部分がdefault値です。

$ 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]

 …省略…

著者プロフィール

木村浩一郎(きむらこういちろう)

GMOメディア株式会社 技術推進室所属のWebアプリケーションエンジニア。最近はミドルウェア・インフラ周りのことも少しずつ学習しています。趣味は将棋。好きな戦法は四間飛車。

Twitter:@kk2170

コメント

コメントの記入