やりたいこと
MySQL5.6.40 vs MySQL8.0.11 の兄弟対決。
遅れ馳せながらMySQL8をベンチマークする。
RDSで選択可能な8.0.11に対するは、RDSのデフォルトでカーソルが合わさっている5.6.40。
セキュリティアップデート諸々含めて、5.6系では5.6.36の次に多いのではないかと勝手に想像して、このバージョンで戦っていきたいと思います。
検証環境
A,負荷試験をかける側EC2 t2.microB,負荷試験をかけられる側1
OS AmazonLinux1
ツール sysbench 1.0.15
RDS db.t2.mediumC,負荷試験をかけられる側2
MySQL MySQL5.6.40(RDSデフォルトバージョン)
RDS db.t2.medium
MySQL MySQL8.0.11
お手軽環境準備
1,負荷試験をかける側の環境構築(MySQL5.6.40用)epelを入れて
# yum -y install epel-release.noarch
mysqlクライアントと、sysbenchのインスト―ル2,負荷試験をかける側の環境構築(MySQL8.0.11用)
# yum -y install sysbench mysql56.x86_64
※AmazonLinux2の場合、MySQLライブラリの影響でsysbenchがyumですんなりインストールできないため、1を採用してます
# 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 エンドポイント>4,DB作成・ユーザー作成・権限付与
password:<自分で決めた任意のpassword>
※RDSのセキュリティグループの仕組みが変わり、セキュリティグループを接続元のセキュリティグループに割り当てる事ができるようになってました。
EC2側の負荷試験を賭ける側のサーバのセキュリティグループからの3306を許可してあげてください。
※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 件のコメント:
コメントを投稿