当 innodb_dedicated_server
启用时,InnoDB
将自动配置以下变量:
-
Note
innodb_log_file_size
和innodb_log_files_in_group
已弃用,已被innodb_redo_log_capacity
取代。
仅在 MySQL 实例驻留在专用服务器上,且可以使用所有可用的系统资源时,才考虑启用 innodb_dedicated_server
。例如,如果您在 Docker 容器或仅运行 MySQL 的专用 VM 中运行 MySQL 服务器,则可以启用 innodb_dedicated_server
。如果 MySQL 实例与其他应用程序共享系统资源,不建议启用 innodb_dedicated_server
。
以下信息描述了每个变量如何自动配置。
-
缓冲池大小根据服务器上的检测内存量进行配置。
表 17.8 自动配置的缓冲池大小
Detected Server Memory Buffer Pool Size 小于 1GB 128MB(默认值) 1GB 到 4GB 检测到的服务器内存
* 0.5大于 4GB 检测到的服务器内存
* 0.75 -
重做日志容量根据服务器上的检测内存量和
innodb_buffer_pool_size
的配置进行配置。如果innodb_buffer_pool_size
未被显式配置,则假设其为默认值。Warning如果
innodb_buffer_pool_size
被设置为大于检测到的服务器内存量的值,则自动重做日志容量配置行为未定义。表 17.9 自动配置的日志文件大小
Detected Server Memory Buffer Pool Size Redo Log Capacity 小于 1GB 未配置 100MB 小于 1GB 小于 1GB 100MB 1GB 到 2GB 不适用 100MB 2GB 到 4GB 未配置 1GB 2GB 到 4GB 任何配置值 round(0.5 * 检测到的服务器内存
in GB) * 0.5 GB4GB 到 10.66GB 不适用 round(0.75 * 检测到的服务器内存
in GB) * 0.5 GB10.66GB 到 170.66GB 不适用 round(0.5625 * 检测到的服务器内存
in GB) * 1 GB大于 170.66GB 不适用 128GB -
innodb_log_file_size
(已弃用)日志文件大小根据自动配置的缓冲池大小进行配置。
-
innodb_log_files_in_group
(已弃用)日志文件数量根据自动配置的缓冲池大小进行配置。
表 17.11 自动配置的日志文件数量
Buffer Pool Size Number of Log Files 小于 8GB round( 缓冲池大小
)8GB 到 128GB round( 缓冲池大小
* 0.75)大于 128GB 64
Note如果圆整的缓冲池大小值小于 2GB,则强制执行最小
innodb_log_files_in_group
值为 2。 -
当
innodb_dedicated_server
启用时,刷新方法设置为O_DIRECT_NO_FSYNC
。如果O_DIRECT_NO_FSYNC
设置不可用,则使用默认的innodb_flush_method
设置。InnoDB
在刷新 I/O 时使用O_DIRECT
,但跳过每个写操作后的fsync()
系统调用。Warningfsync()
在创建新文件、增加文件大小和关闭文件后被调用,以确保文件系统元数据更改被同步。然而,在每个写操作后,fsync()
系统调用仍被跳过。如果 redo 日志文件和数据文件驻留在不同的存储设备上,并且在数据文件写入从设备缓存中刷新之前发生意外退出,可能会导致数据丢失。如果您使用或计划使用不同的存储设备来存储 redo 日志文件和数据文件,并且您的数据文件驻留在一个没有电池备份的设备缓存上,请使用
O_DIRECT
。
如果自动配置的选项在选项文件或其他地方被明确配置,则使用明确指定的设置,并在 stderr
中打印类似以下的启动警告:
[警告] [000000] InnoDB: 选项 innodb_dedicated_server 被忽略,因为 innodb_buffer_pool_size=134217728 被明确指定。
明确配置一个选项并不阻止其他选项的自动配置。
如果 innodb_dedicated_server
启用并且 innodb_buffer_pool_size
被明确配置,则基于缓冲池大小的变量使用服务器上检测到的内存量计算的缓冲池大小值,而不是明确定义的缓冲池大小值。
自动配置的设置每次启动 MySQL 服务器时都会被重新评估和重新配置。