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

MariaDB(MySQL)の主なシステム変数(チューニング)

MariaDB(MySQL)の主なシステム変数(チューニング)

MariaDB(MySQL)の設定ファイル(my.cnf 又は my.ini)のデフォルトの位置は以下にあるようです。

Linuxは以下の何れか
/etc/my.cnf
/etc/mysql/my.cnf
~/.my.cnf
Windowsは以下の何れかのディレクトリ
C:\WINDOWS
C:\
C:\Program Files\MySQL\MySQL Server xx.x
C:\Program Files\MySQL\MySQL Server xx.x\data
C:\Program Files\MariaDB xx.x
C:\Program Files\MariaDB xx.x\data

システム変数をMySQLコマンドライン クライアントから確認するには以下のコマンドを使用します。

-- 全システム変数を表示
mysql> SHOW GLOBAL VARIABLES;

上記だと大量に表示されるので特定のシステム変数だけを確認したい場合は LIKE 文を使用します。

-- システム変数 version を表示
mysql> SHOW GLOBAL VARIABLES LIKE 'version';
-- 又は以下
mysql> SELECT @@version;
-- versionから始まるシステム変数を表示
mysql> SHOW GLOBAL VARIABLES LIKE 'version%';

主なシステム変数

sort_buffer_size

用途:インデックスなしの ORDER BY / GROUP BY 操作を高速化するバッファサイズ
推奨値:128K ~ 1M(データサイズに応じて調整)
設定例:

[mysqld]
sort_buffer_size = 512K

join_buffer_size

用途:インデックス無しjoin(結合)、インデックスを付与するとき等で使われる最小バッファサイズ
推奨値:256K前後がおすすめ

[mysqld]
join_buffer_size = 256K

max_connections

用途:サーバが許容可能なコネクションの数
デフォルト(設定なし)の場合は151
推奨値:通常デフォルト値で問題ないが接続数が多い場合はそれに応じて増やす

[mysqld]
max_connections = 151

thread_cache_size

用途:スレッドをキャッシュする数
推奨値:応答時間が長い場合に大きくすると改善する可能性があるが程々の値に設定します
デフォルトは -1(自動) = 8+(max_connections÷100) = 8+(151÷100)= 9
上限は100

[mysqld]
thread_cache_size = 30

query_cache_type(MySQLは8.0以降で廃止)

用途:クエリキャッシュのタイプ
(0:off, 1:ON SELECT SQL_NO_CACHE以外, 2:DEMAND SELECT SQL_CACHEのみ)
同一クエリーを発行されない場合は無効にするのもあり

[mysqld]
query_cache_type = 1

MySQL 8.0でquery_cacheが廃止された理由

query_cache_size(MySQLは8.0以降で廃止)

query_cache_typeが0以外の場合に有効な変数で、クエリー結果をキャッシュするメモリー量
同一クエリーを発行される場合に有効
デフォルト 1M(1048576Byte)
1024(1K)の倍数単位を設定する

[mysqld]
query_cache_size = 128M

query_cache_limit(MySQLは8.0以降で廃止)

この数より大きいクエリー結果をキャッシュしません。
デフォルト値は1M

[mysqld]
query_cache_limit = 8M

innodb_buffer_pool_size

用途:データベースやInnoDBテーブルのインデックスのバッファサイズ
大きくするとインデックス処理を改善できる可能性がある
デフォルト128M、最大でマシン合計メモリーの50%~80%程度を割り当てるのが一般的。
大きくし過ぎるとOSのページングにより余計に遅くなる。

推奨値:
用途にもよりますがデータベース専用サーバーであれば目安として
  合計メモリ4GB搭載なら 1.6GB 程度
  合計メモリ6GB搭載なら 3GB 程度
  合計メモリ8GB搭載なら 4GB 程度
  合計メモリ16GB搭載なら 10GB 程度
を割り当てるのが妥当かもしれません。

[mysqld]
innodb_buffer_pool_size = 1536M

innodb_log_file_size

用途:InnoDBのロググループ内の各ログファイルのサイズ
推奨値:サーバーの合計メモリの25%以下で innodb_buffer_pool_size の25%程度
デフォルト5M程度

[mysqld]
innodb_log_file_size = 384M

innodb_log_writer_threads(MySQL 8.0以降専用)

用途:専用ログライタスレッドを使用するかしないか設定
推奨値:CPUコアを概ね32個以上搭載している場合はONを推奨
デフォルト ON

[mysqld]
innodb_log_writer_threads  = OFF

read_buffer_size

用途:MyISAMテーブルの順次スキャンで使用されるバッファサイズ
4Kの倍数を設定する
推奨値:128K~1M程度がおすすめ

[mysqld]
read_buffer_size = 128K

read_rnd_buffer_size

用途:MyISAM テーブルの読取、ストレージエンジン、複数範囲読み取りの最適化のために使用
大きい値に割り当てると、ORDER BYパフォーマンスを大きく改善できる可能性がある
デフォルトは256K

[mysqld]
read_rnd_buffer_size = 2M

key_buffer_size

用途:MyISAMテーブルのインデックスのバッファサイズ
大きくするとインデックス処理を改善できる可能性がある
デフォルト8M、最大でマシン合計メモリーの25%を割り当て可能
大きくし過ぎるとOSのページングにより余計に遅くなる

[mysqld]
key_buffer_size = 256M

innodb_ft_min_token_size

用途:フルテキスト検索インデックスのインデックスする最小の単語文字数を指定する。
デフォルトは3文字(つまり2文字の単語はインデックスされない)。
推奨値:日本語の場合は1を設定する必要がある。

[mysqld]
innodb_ft_min_token_size = 1

innodb_ft_cache_size

用途:フルテキスト検索インデックスキャッシュに割り当てられたテーブルごとのメモリー (バイト単位)。
デフォルト値 8,000,000
最小値 1,600,000
最大値 80,000,000

[mysqld]
innodb_ft_cache_size = 8000000

innodb_ft_total_cache_size

用途:フルテキスト検索インデックスキャッシュに割り当てられた合計メモリー (バイト単位)。
デフォルト値 640,000,000
最小値 32,000,000
最大値 1,600,000,000

[mysqld]
innodb_ft_total_cache_size = 640000000

innodb_ft_server_stopword_table

用途:フルテキスト検索で指定したテーブルに登録された単語をインデックスしないようにする
データベース名/テーブル名 で設定する
デフォルトで「INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD」テーブルに単語が登録されている

[mysqld]
innodb_ft_server_stopword_table = database_name/table_name
MariaDB(MySQL)のサンプルSQL一覧に戻る