トップへ(mam-mam.net/)

MySQL 8.0が遅い?innodb_log_writer_threadsの設定で改善する方法と注意点

MySQL 8.0が遅い?innodb_log_writer_threadsの設定で改善する方法と注意点

MySQL 8.0にアップデートしたらクエリの実行が遅くなったと感じたことはありませんか?
その原因のひとつが、InnoDBのログ書き込みに関する設定 innodb_log_writer_threads です。
このページでは、MySQL 8.0でのパフォーマンス低下の背景と、ログライタースレッドの設定変更による改善方法を、設定例とともにわかりやすく解説します。

MySQLを8.0にアップデートしたら遅くなる場合があるようですが、その原因は
・MySQL8.0はスケーラビリティ向上のためにクエリキャッシュが廃止された(これはどうしようもない)
・MySQL8.0はREDOログ関連で変更があり遅くなった
・MySQL8.0はバイナリログがデフォルト出力になり少し遅くなった
だそうです。

対応策

専用ログライタスレッドの設定をオフにする

innodb_log_writer_threads = OFFを設定して、専用ログライタスレッドを無効にすればそこそこ速くなるようです。
オフにしてもREDOログレコードは書き込まれるそうです。
但し、CPUコアを多く(32個等)搭載していて、同時アクセスが多い場合はオンのまま運用したほうが良いようです。
CPUコア数が24個以下の場合はオフにして運用したほうが良いと思われます。

以下は https://dev.mysql.com/doc/refman/8.0/ja/innodb-parameters.html からの引用です。

同時実行性の低いシステムでは、専用ログライタースレッドを無効にすると、パフォーマンスが向上します。


(例)my.ini 又は my.cnf

[mysqld]
・・・省略

# 専用ログライタスレッドの設定をオフにする
innodb_log_writer_threads = OFF

[client]
・・・省略

バイナリログを止める

disable-log-bin又はskip-log-binを設定してバイナリログを止める。
バイナリログを止めると少し速くなるそうです。

(例)my.ini 又は my.cnf

[mysqld]
・・・省略


# バイナリログを止める
skip-log-bin

[client]
・・・省略


参考にしたWEBページ
https://qiita.com/hmatsu47/items/06489ef05bfcaaf310f3
https://qiita.com/kunit/items/7f5883121a621a775e53

MariaDB(MySQL)のサンプルSQL一覧に戻る