MariaDBのチューニング設定(2023年2月版)
slow_logを眺めていたら「遅いの多くね?」と思って調査したときの覚書。
環境: CentOS Stream 8, MariaDB 10.5.9
ほぼWordPress用のデータベース。
InnoDBエンジンしか使っていない(systemは除く)。
1.MySQLTunerを実行
MariaDBにも対応しているチューニング設定を確認してくれるスクリプトをインストールする。
参考: major/MySQLTuner-perl: MySQLTuner is a script written in Perl that will assist you with your MySQL configuration and make recommendations for increased performance and stability.
# cd /opt/software/
# git clone https://github.com/major/MySQLTuner-perl.git
# cd MySQLTuner-perl/
# git tag
# git checkout v1.9.9
# perl mysqltuner.pl
[!!]になっているところを調べて修正していく。
2.設定変数を調べて理解していく
設定値のメモ。
phpMyAdminのVariablesで現在の値と説明を見るのが早い。
共通設定
- skip-name-resolve: クライアントのIPアドレスを逆引きする機能を無効。
- query_cache_type(default:OFF): MairaDB 10.1からはquery_cache_size値で自動設定されるので設定不要。
- table_open_cache(default:2000): 同時に開かれるテーブル数。
- table_definition_cache(default:400): テーブル定義をキャッシュする数。tableの総数が多い場合は引き上げた方がいい。
- performance_schema(default:OFF): SQL実行パフォーマンス情報を取得する機能
- join_buffer_size(default:256K): インデックスを使わない場合の最小メモリ領域。設定不要。
- sort_buffer_size(default:2M): 全てのエンジンのソート処理に使用するメモリ領域。セッションごとに消費する。
- query_cache_size(default:1M): クエリ結果をキャッシュするためのメモリ領域。
- query_cache_limit(default:1M): キャッシュするクエリ結果の上限値。
- query_cache_min_res_unit(default:4K): クエリ結果をキャッシュするブロックサイズ。設定不要。
- tmp_table_size(default:16M): 一時テーブルのメモリ領域。
- max_heap_table_size(default:16M): Memoryエンジンのメモリ領域。tmp_table_sizeと同じ値にする。
InnoDB用設定
- innodb_buffer_pool_size(default:128M): InnoDBのメモリ領域。
- innodb_log_buffer_size(default:16M): InnoDBのクエリ更新ログのためのメモリ領域。innodb_buffer_pool_sizeの4分の1。
MyISAMとAria用設定
- key_buffer_size(default:128M): MyISAMで使用されるためInnoDBだけの場合は小さい値に設定。
- myisam_sort_buffer_size(default:128M): MyISAMで使用されるためInnoDBだけの場合は小さい値に設定。
- aria_sort_buffer_size(default:256M): Ariaで使用されるためInnoDBだけの場合は小さい値に設定。
- aria_pagecache_buffer_size(default:128M): Ariaで使用されるためInnoDBだけの場合は小さい値に設定。
- read_buffer_size(default:128K): MyISAMとAriaでインデックスを使わないシークエンススキャンで使用するメモリ領域。設定不要。
- read_rnd_buffer_size(default:256K): MyISAMでインデックスのソート処理で使用するメモリ領域。設定不要。
3.設定configファイルのサンプル
メモリ4GBのサーバーでは下記のように設定した。
# less /etc/my.cnf.d/mariadb-server.cnf
[server]character-set-server = utf8mb4collation-server = utf8mb4_general_cithread_handling = pool-of-threadsmax_connections = 100# Tuningperformance_schema = ONskip-name-resolvesort_buffer_size = 4Mquery_cache_size = 256Mquery_cache_limit = 4Mtable_open_cache = 10Ktable_definition_cache = 2Ktmp_table_size = 128Mmax_heap_table_size = 128M# InnoDBinnodb_buffer_pool_size = 512Minnodb_log_buffer_size = 128Minnodb_ft_min_token_size = 1 # Fulltext Index# MyISAM/Ariakey_buffer_size = 256Kmyisam_sort_buffer_size = 256Karia_sort_buffer_size = 256Karia_pagecache_buffer_size = 256K# Slow Queryslow_query_log = ONlong_query_time = 1log_output = TABLE
しばらくはslow_logをみながら調整する。
Googleアナリティクスのページ速度でも確認する。