動かざることバグの如し

近づきたいよ 君の理想に

MySQL innodb_dedicated_serverで本当に最適化されるのか試してみた

環境

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
  • ほかは同じ

参考リンク