2018年11月16日金曜日

MySQL8 vs MySQL5.6

やりたいこと

MySQL5.6.40 vs MySQL8.0.11 の兄弟対決。
遅れ馳せながらMySQL8をベンチマークする。
RDSで選択可能な8.0.11に対するは、RDSのデフォルトでカーソルが合わさっている5.6.40。
セキュリティアップデート諸々含めて、5.6系では5.6.36の次に多いのではないかと勝手に想像して、このバージョンで戦っていきたいと思います。

検証環境

A,負荷試験をかける側
EC2 t2.micro
OS AmazonLinux1
ツール sysbench 1.0.15
B,負荷試験をかけられる側1
RDS db.t2.medium
MySQL MySQL5.6.40(RDSデフォルトバージョン)
C,負荷試験をかけられる側2
RDS db.t2.medium
MySQL MySQL8.0.11

お手軽環境準備

1,負荷試験をかける側の環境構築(MySQL5.6.40用)
epelを入れて
# yum -y install epel-release.noarch
 
mysqlクライアントと、sysbenchのインスト―ル
# yum -y install sysbench mysql56.x86_64
※AmazonLinux2の場合、MySQLライブラリの影響でsysbenchがyumですんなりインストールできないため、1を採用してます 
2,負荷試験をかける側の環境構築(MySQL8.0.11用)
# cd /usr/local/src
# wget http://repo.mysql.com/yum/mysql-8.0-community/el/6/x86_64/mysql-community-client-8.0.13-1.el6.x86_64.rpm
# wget http://repo.mysql.com/yum/mysql-8.0-community/el/6/x86_64/mysql-community-common-8.0.13-1.el6.x86_64.rpm
# wget http://repo.mysql.com/yum/mysql-8.0-community/el/6/x86_64/mysql-community-libs-8.0.13-1.el6.x86_64.rpm
# yum install mysql-*.rpm
# mysql --version
mysql  Ver 8.0.13 for Linux on x86_64 (MySQL Community Server - GPL)
※せっかくなので、MySQLClientも5.6→8.0に変更する

負荷試験をかけられる側の環境構築

1,RDSコンソールからMySQL5.6.40を起動

2,RDSコンソールからMySQL8.0.11を起動

3,RDSに接続
# mysql -uroot -p -h<RDS エンドポイント>
password:<自分で決めた任意のpassword>
※RDSのセキュリティグループの仕組みが変わり、セキュリティグループを接続元のセキュリティグループに割り当てる事ができるようになってました。
 EC2側の負荷試験を賭ける側のサーバのセキュリティグループからの3306を許可してあげてください。
4,DB作成・ユーザー作成・権限付与
※5.6系と8系でユーザー管理方法が若干変わったため、以下手順を併記

4-1,MySQL5.6.40用のコマンド
mysql> CREATE DATABASE sbtest;
mysql> GRANT ALL ON sbtest.* TO 'sbtest'@'%' IDENTIFIED BY 'sbtest';
mysql> exit
※sysbenchテスト用のユーザー・パスワードをsbtest:sbtestとしました。

4-2,MySQL8.0.11用のコマンド
mysql> CREATE DATABASE sbtest;
mysql> create user 'sbtest'@'%' identified by 'sbtest';
mysql> grant all privileges on sbtest.* to 'sbtest'@'%';
※ユーザーと権限付与を同時にできなくなったため、最初にユーザーを作成し、その後権限を付与するという流れになったようです。
※sysbenchテスト用のユーザー・パスワードをsbtest:sbtestとしました。

負荷試験用のテーブルを作成する

# sysbench /usr/share/sysbench/oltp_read_write.lua \
--db-driver=mysql \
--table-size=1000000 \
--mysql-host=<RDS エンドポイント> \
--mysql-password=sbtest \
--time=60 \
--db-ps-mode=disable \
prepare
※table-sizeは1,000,000レコード想定という意味らしく、容量ではない模様

負荷試験実施

# sysbench /usr/share/sysbench/oltp_read_write.lua \
--db-driver=mysql \
--table-size=1000000 \
--mysql-host=<RDS エンドポイント> \
--mysql-password=sbtest \
--time=60 \
--db-ps-mode=disable \
--threads=[同時処理数] \
run
※threadsの値を1,2,4,8,16,32と変更して実施

結果

レイテンシーを95パーセンタイルで集計した際の数値

60秒で処理したトランザクション数

所感

過去4系→5系の時も伝統的にそうですが、バージョンを上げるとパフォーマンスが落ちる傾向がありますね。今回はRDSの吊るしの設定のままなので、チューニングをすることで結果が覆る可能性も大いにあります。旧バージョンのMySQLのセキュリティアップデートスケジュールとの兼ね合いで、バージョンアップもしくは、別のRDBエンジンを選定していった方がいいと思いました。
おわり。

0 件のコメント:

コメントを投稿