概要
業務で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% |