innodb_dedicated_server は MySQL 8.0 で追加されたオプションで、サーバーのメモリー量から自動的にInnoDBのパラメータを設定します。(デフォルトOFF)
MySQL :: MySQL 8.0 Reference Manual :: 15.13 InnoDB Startup Options and System Variables
パラメーターの設定ルール
「dedicated」と名前がついている通り、MySQL専有サーバーでの利用を想定しています。
現在、このパラメーターをONにした場合に変更されるパラメーターは以下の3つのみです。
- innodb_buffer_pool_size
- innodb_log_file_size
- innodb_flush_method
搭載メモリー量によって設定される値は以下の通りです
メモリー量 | innodb_buffer_pool_size | innodb_log_file_size |
---|---|---|
1GB未満 | 128MB | 48MiB |
4GB以下 | 搭載メモリの50% | 128MiB |
8GB以下 | 搭載メモリの75% | 512MiB |
16GB以下 | 搭載メモリの75% | 1024MiB |
16GBより多い | 搭載メモリの75% | 2048MiB |
innodb_flush_method は O_DIRECT_NO_FSYNC
に設定されます(使用できない場合はデフォルト値のままです)
innodb_dedicated_server を試してみる
デフォルトの場合(innodb_dedicated_server=OFF)
以下のようにデフォルト値のままです。
1 2 3 4 5 6 7 8 9 |
mysql > select * from performance_schema.global_variables where variable_name in ("innodb_buffer_pool_size", "innodb_log_file_size", "innodb_flush_method"); +-------------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +-------------------------+----------------+ | innodb_buffer_pool_size | 134217728 | | innodb_flush_method | fsync | | innodb_log_file_size | 50331648 | +-------------------------+----------------+ 3 rows in set (0.00 sec) |
innodb_dedicated_server=ON(メモリ62GB搭載)
ルールに基づいて設定値が変わっていることが確認できます。
1 2 3 4 5 6 7 8 |
mysql > select * from performance_schema.global_variables where variable_name in ("innodb_buffer_pool_size", "innodb_log_file_size", "innodb_flush_method"); +-------------------------+-------------------+ | VARIABLE_NAME | VARIABLE_VALUE | +-------------------------+-------------------+ | innodb_buffer_pool_size | 51539607552 | | innodb_flush_method | O_DIRECT_NO_FSYNC | | innodb_log_file_size | 2147483648 | +-------------------------+-------------------+ |
変更対象のパラメーターの値を設定していた場合
変更対象のパラメーターを事前に設定していると innodb_dedicated_server を ON にしていても無視されます。下記は innodb_buffer_pool_size を設定していた場合、エラーログにワーニングとして出力されます。
1 |
2018-06-28T07:43:53.831370Z 0 [Warning] [MY-012358] [InnoDB] InnoDB: Option innodb_dedicated_server is ignored for innodb_buffer_pool_size because innodb_buffer_pool_size=3221225472 is specified explicitly. |
まとめ
innodb_dedicated_server の設定を有効にしておくと、MySQLが再起動する度に搭載メモリ量を確認して設定するようなので、専有よりもリソースが可変するdockerのようなコンテナ環境で使用するほうが便利な機能かもしれません。