環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

MySQL8のパフォーマンスを確認してみた【vsMySQL5.7】【AlmaLinux8】

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でデータは異なりますが、異なるデータで数回テストしています)

テスト内容

  1. 【KEY FIND】PRIMARY KEYによるfindを行う。試行回数は50,000回。(対象idは毎回ランダムで決定)
  2. 【GT INTEGER】point値がx以上で100件取得する。試行回数は50,000回。(xは毎回ランダムで決定)
  3. 【LIKE】nameをLIKE句でSELECTする。試行回数は1,500回。(検索ワードはfakerで毎回作成し、名字を検索ワードとする)
  4. 【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.7KEY FINDGT INTEGERLIKEINSERT
1回目21.22859.08977.95617.567
2回目21.32958.29478.28217.256
3回目21.24957.07377.97517.066
単位(sec)
MySQL8KEY FINDGT INTEGERLIKEINSERT
1回目23.99959.61679.16033.091
2回目23.90858.95778.75035.195
3回目23.89358.60279.02633.196
単位(sec)

まとめ

前半3個の試験は、概ね大きな差はないものの、わずかにMySQL5.7の方がパフォーマンスが良いですね。明確に差が出たのはINSERTで、およそ2倍の開きが・・・。んーそうですか・・チューニングの問題かなぁ。。

まぁ描画処理とか画像ダウンロードの処理などの物理的な速度に比べたら、誤差ではありますが、もう少しパフォーマンスが出ないか要チェックですね。