環境
- MySQL 8.0
innodb_dedicated_serverとは
innodb_dedicated_serverは、MySQLサーバーが稼働しているハードウェアのメモリ量に応じて、InnoDBストレージエンジンに関連する重要な設定を自動的に最適化するための便利な機能。 このオプションを有効にすることで、特にMySQL専用サーバーのパフォーマンスを手軽に向上させることができる。
デフォルトでは無効だが、有効にすることで以下のパラメーターの値が自動最適化される。
具体的な仕様は以下の通り。
| メモリー量 | innodb_buffer_pool_size | innodb_log_file_size |
|---|---|---|
| 1GB未満 | 128MB | 48MiB |
| 4GB以下 | 搭載メモリの50% | 128MiB |
| 8GB以下 | 搭載メモリの75% | 512MiB |
| 16GB以下 | 搭載メモリの75% | 1024MiB |
| 16GBより多い | 搭載メモリの75% | 2048MiB |
ここでは本当に変わるのか、何が変わるのか実際に検証してみた。
検証
SELECT variable_name, variable_value AS value_in_bytes, ROUND(variable_value / 1024 / 1024, 2) AS value_in_mb FROM performance_schema.global_variables WHERE variable_name IN ( 'innodb_buffer_pool_size', 'innodb_redo_log_capacity' );
MEM16GB innodb_dedicated_server無効時
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)
MEM16GB innodb_dedicated_server有効時
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 | 12884901888 | | innodb_flush_method | O_DIRECT_NO_FSYNC | | innodb_log_file_size | 50331648 | +-------------------------+-------------------+ 3 rows in set (0.00 sec)
MEM32GB innodb_dedicated_server有効時
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 | 25769803776 | | innodb_flush_method | O_DIRECT_NO_FSYNC | | innodb_log_file_size | 50331648 | +-------------------------+-------------------+ 3 rows in set (0.00 sec)
- innodb_buffer_pool_sizeは24GB
- ほかは同じ