mysql8.0之后推出了服务器资源自适应参数innodb_dedicated_server,可以根据操作系统内存资源自动设置一部分参数,避免手动设置不合理的烦恼。
参考官方文档:
https://dev.mysql.com/doc/refman/8.0/en/innodb-dedicated-server.html
官方建议仅在专用服务器上设置innodb_dedicated_server=ON,如果你的服务器上除了MySQL服务还部署了其他应用,建议不要开启该参数
设置innodb_dedicated_server=ON会自动配置以下参数:innodb_buffer_pool_size
innodb_log_file_size
innodb_log_files_in_group (as of MySQL 8.0.14)
innodb_flush_method
注:如果设置了innodb_dedicated_server=ON的同时又显式设置了innodb_buffer_pool_size,innodb_log_file_size,innodb_log_files_in_group,innodb_flush_method,则会以显式设置的参数值为准。
innodb_buffer_pool_size自动设置规则:Detected Server MemoryBuffer Pool Size
Less than 1GB128MiB (the default value)
1GB to 4GBdetected server memory* 0.5
Greater than 4GBdetected server memory* 0.75
所以,在一个4C8G的服务器上,innodb_buffer_pool_size分配的值为6G
innodb_log_file_size自动设置规则:Buffer Pool SizeLog File Size
Less than 8GB512MiB
8GB to 128GB1024MiB
Greater than 128GB2048MiB
所以,在一个4C8G的服务器上,一个日志文件的大小为512M
innodb_log_files_in_group自动设置规则:Buffer Pool SizeNumber of Log Files
Less than 8GBROUND(buffer pool size)
8GB to 128GBROUND(buffer pool size* 0.75)
Greater than 128GB64
所以,在一台4C8G的服务器上,日志文件数为6,该参数8.0.14之后才加入自动配置:
innodb_flush_method自动配置规则:
“The flush method is set to O_DIRECT_NO_FSYNC when innodb_dedicated_server is enabled”https://dev.mysql.com/doc/refman/8.0/en/innodb-dedicated-server.html
所以只要开启了innodb_dedicated_server,innodb_flush_method=O_DIRECT_NO_FSYNC
这一步其实是有一定风险,我们知道一般设置的innodb_flush_method=O_DIRECT,意味着打开文件(数据文件,redo)时使用的是O_DIRECT方式,写文件时,则会写入文件系统buffer,并调用fsync()刷盘。设置innodb_flush_method=O_DIRECT_NO_FSYNC,则写入文件系统buffer后,跳过fsync的调用。官方建议如果使用外部存储,改用O_DIRECT。保险的方式是开启innodb_dedicated_server的同时显式指定innodb_flush_method=O_DIRECT
目前来看自适应功能可自动设置的参数还比较少,后续随着版本迭代,应该会引入更多参数~~~