SysBench は、CPUやメモリ、ディスクI/Oなど、さまざまなシステム性能を測定することができる、ベンチマークツールです。中でも、MySQLなどのデータベースのトランザクション処理の測定ができるのが特徴です。そこで今回は、SysBench を使って、MySQL のベンチマークテストをしてみたいと思います。
SysBench のインストール
EPELリポジトリからインストールします。サーバOSは、CentOS7.1です。
EPELリポジトリの追加
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
SysBench のインストール
EPELリポジトリの無効化
vim /etc/yum.repos.d/epel.repo
(略)
enabled=1
↓
enabled=0
下準備
測定用データベースの作成
SysBench が測定に使用するデータベース「sbtest」を作成します。
SysBench 用のMySQLユーザの作成
上で作成した sbtest データベースのみに接続可能な、MySQLユーザ「sbtest」を作成します。SysBench はデフォルトで、この名前(sbtest)のユーザとデータベースを使用します。
mysql> GRANT ALL ON sbtest.* TO 'sbtest'@'localhost' IDENTIFIED BY '<パスワード>';
測定用テーブルの作成
sysbench コマンドを使って、先ほど作成したデータベースに、測定用のテーブルを作成します。ストレージエンジンはデフォルトで innodb が使用されます。
--test=oltp \
--db-driver=mysql \
--oltp-table-size=10000 \
--mysql-password=<パスワード> \
prepare
--test
テストモードの指定です。MySQLなど、データベースのトランザクション処理の測定をする場合は「oltp」を指定します。
--db-driver
データベースソフトの種類を指定します。MySQL(mysql)と、PostgreSQL(pgsql) が指定できます。
--oltp-table-size
作成するテーブルのレコード数を指定します。実運用で想定されるレコード数を指定します。
--mysql-password
先ほど作成した、MySQLユーザ「sbtest」のパスワードを指定します。
prepare
テーブルの作成を実行します。
上記のコマンドを実行すると、1万レコードある下のようなテーブル作成されます。
mysql> SELECT * FROM sbtest.sbtest; +-------+---+---+----------------------------------------------------+ | id | k | c | pad | +-------+---+---+----------------------------------------------------+ | 1 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | | 2 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | | 3 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | (略) | 9999 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | | 10000 | 0 | | qqqqqqqqqqwwwwwwwwwweeeeeeeeeerrrrrrrrrrtttttttttt | +-------+---+---+----------------------------------------------------+ 10000 rows in set (0.02 sec)
MySQL の性能測定
いよいよ性能測定の実行です。今回は、同時接続数(--num-threads)は1、測定時間(--max-time)は60秒の条件で測定を行います。
--test=oltp \
--db-driver=mysql \
--oltp-table-size=10000 \
--mysql-password=<パスワード> \
--num-threads=1 \
--max-requests=0 \
--max-time=60 \
--oltp-read-only=off \
run
--num-threads
スレッド数の指定です。MySQLの同時接続数に該当します。
--max-requests
測定で実行する最大リクエスト数です。「0」を指定すると無制限になります。
--max-time
測定時間を秒数で指定します。「0」を指定すると無制限になります。
--oltp-read-only
読み出しのみ測定する場合は「on」を指定します。「off」(デフォルト) を指定すると、読み書き両方の性能を測定します。
run
測定を実行します。
上記以外にも指定できるオプションは沢山あります。詳細はコマンドヘルプ「sysbench --test=oltp help」をご参照ください。
上記のコマンドを実行すると、以下のような測定結果が表示されます。一般的にデータベースの性能は、TPS(トランザクション毎秒) が使われますので、transactions: → (4.22 per sec.) の値を指標にするのが良いかと思います。
Done. OLTP test statistics: queries performed: read: 3556 write: 1270 other: 508 total: 5334 transactions: 254 (4.22 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 4826 (80.14 per sec.) other operations: 508 (8.44 per sec.) Test execution summary: total time: 60.2218s total number of events: 254 total time taken by event execution: 60.2187 per-request statistics: min: 81.39ms avg: 237.08ms max: 3889.65ms approx. 95 percentile: 1239.74ms Threads fairness: events (avg/stddev): 254.0000/0.00 execution time (avg/stddev): 60.2187/0.00
終わりに
SysBench はコマンドのオプションが多いので、少し複雑に見えますが、使い方はとても簡単です。初めて使ってみましたが、インストールを含めて10分くらいで、MySQLの性能測定をすることができました。本番投入前の検証作業や、サーバ性能の比較などで使ってみてはいかがでしょうか。
コメント