Help us understand the problem. What is going on with this article?

sysbenchを使ったMySQL5.6とPXC5.7の性能比較

More than 1 year has passed since last update.

概要

業務でPercona XtraDB Cluster5.7(以下、PXC5.7)を使うことになり、せっかくなのでMySQL5.6環境と性能差を見てみることにしました。
結果に波があったので同じホストの他インスタンスの影響を受けている可能性があります。。参考程度にお願いします。

先にまとめ

総じてPXC5.7は優秀でした。

検証

環境

バージョン CPU MEMORY
MySQL5.6 1 4GB
PXC5.7 1 4GB

前提条件

  • mysqlのパラメータは、バージョンや構成等の差分を除き、基本的に揃えています。

ベンチマークツール

SysBenchというをベンチマークツールを使用します。

Sysbencのインストール方法

$ sudo yum install sysbench -y
$ sysbench --version
sysbench 0.4.12

動作テスト

試しにcpuのパフォーマンステストを実施します。
以下のように出力されればOKです。

$ sysbench --test=cpu run
(snip)
Maximum prime number checked in CPU test: 10000


Test execution summary:
    total time:                          13.8662s
    total number of events:              10000
    total time taken by event execution: 13.8598
    per-request statistics:
         min:                                  1.31ms
         avg:                                  1.39ms
         max:                                 18.70ms
         approx.  95 percentile:               1.66ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   13.8598/0.00

トランザクションテスト

事前準備

こちらの情報を参考にダミーテーブルを作成します。デフォルトだと10000件のダミーデータが作成されます。

テスト1

以下のコマンドを実行し、データベースのトランザクションテストを実行します。

$ sysbench --num-threads=1 --test=oltp --mysql-password=hogehoge --db-driver=mysql run

オプションについては、こちら が分かりやすいです。

テスト1 結果

今回は一部結果のみを抜粋します。PXC5.7の方が倍近い数値を出しました。さすがです。

項目 MySQL5.6 PXC5.7
TPS(Transaction per second) 65.98 per sec. 120.80 per sec.
read/write requests: 1253.62 per sec. 2295.29 per sec.
other operations: 131.96 per sec. 241.61 per sec.

テスト2

次に innodb_buffer_pool_size のサイズ(今回は512MB)より大きなテストデータを作成して試験します。 --oltp-table-size でレコード数を指定します。

# テーブル作成コマンド
$ sysbench --test=oltp --mysql-password=hogehoge --db-driver=mysql --oltp-table-size=10000000 prepare

$ sudo mysql
mysql> select table_schema, sum(data_length+index_length) /1024 /1024 as MB from information_schema.tables  group by table_schema order by sum(data_length+index_length) desc;                            +--------------------+---------------+
| table_schema       | MB            |
+--------------------+---------------+
| sbtest             | 2120.65625000 | ※sbtestという約2GBのテーブルが作成されました

mysql,PXCを再起動して、innodb_buffer_pool_size を開放し、さきほどと同じコマンドでテストします。

$ sysbench --num-threads=1 --test=oltp --mysql-password=hogehoge --db-driver=mysql run

テスト2 結果

MySQL5.6に関しては、テスト1の結果と比較すると性能が半分近くに落ちています。
sarで確認したところ、 iowaitが60%〜70%近く発生したのでディスクI/Oが発生したようです。
PXC5.7は、性能劣化は確認できませんでした。

MySQL5.6

項目 テスト1 テスト2 性能比
TPS(Transaction per second) 65.98 53.89 -18.32%
read/write requests: 1253.62 1024.00 -18.32%
other operations: 131.96 107.79 -18.32%

PXC5.7

本当か?w

項目 テスト1 テスト2 性能比
TPS(Transaction per second) 120.80 130.07 7.67%
read/write requests: 2295.29 2471.29 7.67%
other operations: 250.38 260.14 3.90%
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away