为专用的MySQL服务器启用自动配置
当innodb_dedicated_server
启用时,InnoDB
会自动配置以下变量:
innodb_buffer_pool_size
innodb_log_file_size
innodb_log_files_in_group
(自MySQL 8.0.14起)innodb_flush_method
仅innodb_dedicated_server
当MySQL实例驻留在可以使用所有可用系统资源的专用服务器上时,才考虑启用它。例如,如果您在仅运行MySQL的Docker容器或专用VM中运行MySQL Server,请考虑启用。innodb_dedicated_server
如果MySQL实例与其他应用程序共享系统资源,则不建议启用。
以下信息描述了如何自动配置每个变量。
innodb_buffer_pool_size
根据在服务器上检测到的内存量来配置缓冲池大小。
自动配置的缓冲池大小
检测到的服务器内存 缓冲池大小 小于1GB 128MiB(默认值) 1GB至4GB detected server memory
* 0.5大于4GB detected server memory
* 0.75innodb_log_file_size
从MySQL 8.0.14开始,将根据自动配置的缓冲池大小来配置日志文件的大小。
自动配置的日志文件大小
缓冲池大小 日志文件大小 小于8GB 512MiB 8GB至128GB 1024MiB 大于128GB 2048英里 注意
在MySQL 8.0.14之前,该
innodb_log_file_size
变量是根据服务器上检测到的内存量自动配置的,如下所示:自动配置的日志文件大小(MySQL 8.0.13及更低版本)
检测到的服务器内存 日志文件大小 <1GB 48MiB(默认值) <= 4GB 128MiB <= 8GB 512MiB <= 16GB 1024MiB > 16GB 2048英里 innodb_log_files_in_group
日志文件的数量根据自动配置的缓冲池大小(以GB为单位)进行配置。
innodb_log_files_in_group
MySQL 8.0.14中添加了变量的自动配置。自动配置的日志文件数
缓冲池大小 日志文件数 小于8GB 圆( buffer pool size
)8GB至128GB 回合( buffer pool size
* 0.75)大于128GB 64 注意
innodb_log_files_in_group
如果舍入后的缓冲池大小值小于2GB,则强制使用最小值 2。innodb_flush_method
冲洗方法设置为
O_DIRECT_NO_FSYNC
当innodb_dedicated_server
被启用。如果该O_DIRECT_NO_FSYNC
设置不可用,innodb_flush_method
则使用默认设置。InnoDB
O_DIRECT
在刷新I / O期间使用,但fsync()
在每次写操作后跳过系统调用。警告
在MySQL 8.0.14之前,此设置不适用于文件系统,例如XFS和EXT4,它们需要
fsync()
系统调用来同步文件系统元数据更改。从MySQL 8.0.14开始,
fsync()
在创建新文件,增加文件大小和关闭文件后会调用该文件,以确保文件系统元数据更改同步。fsync()
每次写操作后,系统调用仍然被跳过。如果重做日志文件和数据文件位于不同的存储设备上,则可能会导致数据丢失,并且在从没有电池供电的设备缓存中清除数据文件写入之前,将发生崩溃。如果您使用或打算将不同的存储设备用于重做日志文件和数据文件,并且您的数据文件位于不具有电池后备缓存的设备上,请
O_DIRECT
改用。
如果在选项文件或其他文件中显式配置了自动配置的选项,则使用显式指定的设置,并且将类似以下的启动警告打印到stderr
:
[警告][000000] InnoDB:对于innodb_buffer_pool_size,选项innodb_dedicated_server被忽略,因为显式指定了innodb_buffer_pool_size = 134217728。
一个选项的显式配置不会阻止其他选项的自动配置。
如果innodb_dedicated_server
已启用,并且innodb_buffer_pool_size
已在选项文件中对其进行了显式配置,innodb_log_file_size
并且innodb_log_files_in_group
仍会根据根据服务器上检测到的内存量计算出的缓冲池大小值自动进行配置,即使该值未用于配置缓冲区的大小池。
每次启动MySQL服务器时,都会评估并重新配置自动配置的设置。