SysBench で MySQL の性能測定(ベンチマーク)

Linux
Linux
スポンサーリンク

SysBench は、CPUやメモリ、ディスクI/Oなど、さまざまなシステム性能を測定することができる、ベンチマークツールです。中でも、MySQLなどのデータベースのトランザクション処理の測定ができるのが特徴です。そこで今回は、SysBench を使って、MySQL のベンチマークテストをしてみたいと思います。

SysBench のインストール

EPELリポジトリからインストールします。サーバOSは、CentOS7.1です。

EPELリポジトリの追加

rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7

SysBench のインストール

yum -y install sysbench

EPELリポジトリの無効化
vim /etc/yum.repos.d/epel.repo

[epel]
(略)
enabled=1

enabled=0

下準備

測定用データベースの作成

SysBench が測定に使用するデータベース「sbtest」を作成します。

mysqladmin -u root -p create sbtest

SysBench 用のMySQLユーザの作成

上で作成した sbtest データベースのみに接続可能な、MySQLユーザ「sbtest」を作成します。SysBench はデフォルトで、この名前(sbtest)のユーザとデータベースを使用します。

mysql -u root -p
mysql> GRANT ALL ON sbtest.* TO 'sbtest'@'localhost' IDENTIFIED BY '<パスワード>';

測定用テーブルの作成

sysbench コマンドを使って、先ほど作成したデータベースに、測定用のテーブルを作成します。ストレージエンジンはデフォルトで innodb が使用されます。

sysbench \
--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秒の条件で測定を行います。

sysbench \
--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の性能測定をすることができました。本番投入前の検証作業や、サーバ性能の比較などで使ってみてはいかがでしょうか。

コメント

タイトルとURLをコピーしました