MySQL8.0推出一个号称可以自适应服务器的参数,保证在各种不同的服务器、虚拟机、容器下自动适配服务器资源,让我们一起来看看到底它能做到什么地步。
可以设置参数 innodb_dedicated_server=ON来让MySQL自动探测服务器的内存资源,确定innodb_buffer_pool_size, innodb_log_file_size 和 innodb_flush_method 三个参数的取值。具体取值策略如下。
innodb_buffer_pool_size:
innodb_log_file_size:
如果系统允许设置为O_DIRECT_NO_FSYNC。如果系统不允许,则设置为InnoDB默认的Flush method。
上述这些参数在MySQL每次启动时自动探测服务器(包括虚拟机和容器的内存)配置并自动生效。
"[Warning] InnoDB: Option innodb_dedicated_server is ignored for because 'variable name'=? is specified explicitly."
'variable name' 指的就是 innodb_buffer_pool_size/innodb_log_file_size/inndob_flush_method参数。
注意:你不管是在配置文件、命令行、还是MySQL新引入的固化配置中设定上述三个参数都被认为是显式指定了参数值,都会优先生效。
"[ERROR] InnoDB: Error number 28 means 'No space left on device' [ERROR] InnoDB: Cannot set log file to size MB"
* mysqld服务拒绝启动。
在5.7上,innodb_buffer_pool_size默认为134217728即128MB,如果采用默认设置,MySQL 5.7大致只能消耗系统的512M内存。
而innodb_log_file_size=50331648 即48M,对于大并发下的请求并不适用。
这也导致大量文章建议采用相应的方法优化设置这些参数,例如:
https://www.percona.com/blog/2015/06/02/80-ram-tune-innodb_buffer_pool_size/
https://www.percona.com/blog/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/
https://www.percona.com/blog/2017/10/18/chose-mysql-innodb_log_file_size/
MySQL 8.0提供了innodb_dedicated_server=ON这个参数可以很大程度解决这方面的问题。
这个参数在InnoDB上对性能的影响相对较大,并且也是最急迫需要自适应调整的几个参数。(个人觉得innodb_buffer_pool_instances也应该在自适应调整的范围内)
目前它也只是探测了系统内存,实现起来比较简单,并且对性能改进非常有效,基本能解决绝大部分入门DBA安装的性能问题。就像一个在班级成绩排名倒数的同学,先帮他解决了60分及格的问题再考虑提高到班级前10名。
要解决其他问题,例如sort_buffer_size,read_rnd_buffer_size等连接内存自适应调整,需要对内存的精细控制,并且各种应用访问方式并不一样,并不是那么容易自适应;而innodb_read_io_threads,innodb_write_io_threads等需要根据CPU核数调整,也跟应用访问模式有一定关系;对于innodb_io_capacity而言,要探测底层存储设备具体的IO能力,并相应设置,也不是一个简单的工作。
到底其他影响性能的自适应参数什么时候调,只能敬请期待了。
各位云厂商的同志们有福了,利用这个参数就可以保证服务器(虚拟机或者容器)扩展以后,MySQL能“自适应”以尽量消耗更多的服务器资源,而不用自己设计一个自动扩展MySQL服务器资源配置的脚本。既避免了服务器扩展以后MySQLbuffer pool不变等,使用不了那么多资源;也避免了服务器缩减了以后MySQLbuffer pool过大等,导致MySQL服务进程启动不起来。
这个参数的改变,也意味着:
李春,沃趣科技联合创始人,高级MySQL数据库专家,浙江大学数据库硕士
从事MySQL相关工作10年+。曾作为阿里巴巴MySQL数据库leader,负责产品,应用架构的优化和部署;实现了阿里巴巴3亿产品从Oracle小型机到MySQL SSD的平滑迁移。技术上专注于MySQL复制、数据一致性、数据安全性、扩展性和运维自动化的领域。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。