MySQL8のパフォーマンスを確認してみた【vsMySQL5.7】【AlmaLinux8】
前回、MySQL8をインストールしてみましたので、せっかくなので今までよく使っていたMysql5.7と比較してみようと思います。
概要
テストデータ
PRIMARY KEY, String, Integerから成る簡単なテーブルを用意して、適当なデータを10万件いれた。
CREATE TABLE `tests` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`point` int(11) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
nameはfakerを使ってデータ生成しており、pointには1から1,000,000までの数字がランダムに入っています。
(MySQL5.7とMySQL8のDBでデータは異なりますが、異なるデータで数回テストしています)
テスト内容
- 【KEY FIND】PRIMARY KEYによるfindを行う。試行回数は50,000回。(対象idは毎回ランダムで決定)
- 【GT INTEGER】point値がx以上で100件取得する。試行回数は50,000回。(xは毎回ランダムで決定)
- 【LIKE】nameをLIKE句でSELECTする。試行回数は1,500回。(検索ワードはfakerで毎回作成し、名字を検索ワードとする)
- 【INSERT】レコードをINSERTする。試行回数は10,000回。(データはfakerで毎回作成)
具体的に確認したい方は、ソースコードをご確認ください。
https://github.com/supilog/mysql_test_in_laravel/blob/main/app/Console/Commands/MysqlTest.php
環境
AWS EC2 t2micro
AlmaLinux8.5
Laravel8 (php7.4)
設定(my.cnf)
ほぼデフォルト値とします。具体的には、以下です。
[mysqld]
datadir=/var/lib/mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/lib/mysql/mysql.sock
character_set_server = utf8mb4
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# error log
log-error = /var/log/mysql/error.log
# slow query log
slow_query_log = 0
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 5.0
log_queries_not_using_indexes = 0
# general log
general_log = 0
general_log_file = /var/log/mysql/query.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
テスト結果
テストデータのnameとpointは1回目〜3回目まで、毎回異なるデータをfakerにおまかせし作成しています。
MySQL5.7 | KEY FIND | GT INTEGER | LIKE | INSERT |
1回目 | 21.228 | 59.089 | 77.956 | 17.567 |
2回目 | 21.329 | 58.294 | 78.282 | 17.256 |
3回目 | 21.249 | 57.073 | 77.975 | 17.066 |
MySQL8 | KEY FIND | GT INTEGER | LIKE | INSERT |
1回目 | 23.999 | 59.616 | 79.160 | 33.091 |
2回目 | 23.908 | 58.957 | 78.750 | 35.195 |
3回目 | 23.893 | 58.602 | 79.026 | 33.196 |
まとめ
前半3個の試験は、概ね大きな差はないものの、わずかにMySQL5.7の方がパフォーマンスが良いですね。明確に差が出たのはINSERTで、およそ2倍の開きが・・・。んーそうですか・・チューニングの問題かなぁ。。
まぁ描画処理とか画像ダウンロードの処理などの物理的な速度に比べたら、誤差ではありますが、もう少しパフォーマンスが出ないか要チェックですね。