MySQL 8.0 首个自适应参数横空出世

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 8.0 首个自适应参数横空出世 什么是自适应参数 MySQL8.0推出一个号称可以自适应服务器的参数,保证在各种不同的服务器、虚拟机、容器下自动适配服务器资源,让我们一起来看看到底它能做到什么地步。

MySQL 8.0 首个自适应参数横空出世

什么是自适应参数

MySQL8.0推出一个号称可以自适应服务器的参数,保证在各种不同的服务器、虚拟机、容器下自动适配服务器资源,让我们一起来看看到底它能做到什么地步。


自适应参数是如何设置和适应变化的

可以设置参数 innodb_dedicated_server=ON来让MySQL自动探测服务器的内存资源,确定innodb_buffer_pool_size, innodb_log_file_size 和 innodb_flush_method 三个参数的取值。具体取值策略如下。

innodb_buffer_pool_size:

  • <1G: 128M(innodb_dedicated_server=为OFF时的默认取值)

  • <=4G: 探测到的物理内存 * 0.5

  • >4G: 探测到的物理内存 * 0.75

innodb_log_file_size:

  • <1G: 48M(innodb_dedicated_server=为OFF时的默认取值)

  • <=4G: 128M

  • <=8G: 512M

  • <=16G: 1024M

  • >16G: 2G

innodb_flush_method:

如果系统允许设置为O_DIRECT_NO_FSYNC。如果系统不允许,则设置为InnoDB默认的Flush method。 

上述这些参数在MySQL每次启动时自动探测服务器(包括虚拟机和容器的内存)配置并自动生效。


自适应参数使用注意

  • innodb_dedicated_server默认设置为OFF,不会自适应调整3个参数值。该参数也不是动态参数,无法动态调整,也就是说MySQL启动后无法修改这个参数

  • innodb_dedicated_server=ON 设置以后它其实只探测了服务器内存,所以目前只能自适应调整内存相关的三个参数

  • innodb_dedicated_server=ON的情况下,如果还显式设置了 innodb_buffer_pool_size / innodb_log_file_size / 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新引入的固化配置中设定上述三个参数都被认为是显式指定了参数值,都会优先生效。

  • 显示指定某一个值,并不会影响其他变量的自适应参数值设置。例如显式设置了innodb_buffer_pool_size,那么buffer pool会按照你显示设置的值初始化,而不是 innodb_dedicated_server参数对应的值。但是innodb_log_file_size 和 innodb_flush_method 并不会受影响,它们还是会按照innodb_dedicated_server的自适应值按照服务器的内存大小来设置。

  • innodb_dedicated_server=ON的情况下,mysqld服务进程每次重启后都会自动调整上述三个参数值。在任何时候MySQL都不会将自适应值保存在持久配置中。

  • 如果系统不支持O_DIRECT_NO_FSYNC,MySQL会沿用之前的默认值。MySQL仍然必须保证在所有平台上能正常启动,不需要任何其他更改。

  • 如果自适应导致innodb_log_file_size对应的redo log file超过了磁盘空间限制(这个空间得有多小!),将会采取以下措施:

    • 新生成的日志文件redo log将被删除

    • 错误日志显示如下

 
 
  1. "[ERROR] InnoDB: Error number 28 means 'No space left on device'

  2.  [ERROR] InnoDB: Cannot set log file to size MB"

* mysqld服务拒绝启动。
  • innodb_dedicated_server=ON并不见得是最优的配置。例如,你用了MyISAM,MyRocks等其他存储引擎时,建议手工调整,而不是设置innodb_dedicated_server=ON

  • XFS系统请手工设置inndob_flush_method=O_DIRECT。在inndob_flush_method=O_DIRECT_NO_FSYNC下,InnoDB使用O_DIRECT来刷新IO,但是跳过fsync()步骤。对某些文件系统有效,但是对XFS文件系统并不适用。为了保证文件的metadata刷新到磁盘中,XFS必须使用O_DIRECT。

自适应之前是怎么样的

在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提供服务的。innodb_dedicated_server的默认设置都是假设这个服务器的资源,MySQL都能用起来。

不适应场景

  • 单机多实例情况下不适应。

  • 其他有特殊场景要求的不适用。比如:不是主要以InnoDB为存储引擎的;服务器上还有其他应用程序的等等。

重大意义

各位云厂商的同志们有福了,利用这个参数就可以保证服务器(虚拟机或者容器)扩展以后,MySQL能“自适应”以尽量消耗更多的服务器资源,而不用自己设计一个自动扩展MySQL服务器资源配置的脚本。既避免了服务器扩展以后MySQLbuffer pool不变等,使用不了那么多资源;也避免了服务器缩减了以后MySQLbuffer pool过大等,导致MySQL服务进程启动不起来。

这个参数的改变,也意味着:

  • 后续MySQL的类似参数会越来越优化,DBA排查问题时对MySQL参数的考虑会越来越少

  • MySQL的运维DBA的工作越来越简单了,MySQL也会越来越智能

  • 原文地址https://blog.csdn.net/woqutechteam/article/details/80856108

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
2月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的参数文件
MySQL启动时会读取配置文件my.cnf来确定数据库文件位置及初始化参数。该文件分为Server和Client两部分,包含动态与静态参数。动态参数可在运行中通过命令修改,而静态参数需修改my.cnf并重启服务生效。文中还提供了相关代码示例和视频教程。
|
2月前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
96 1
|
4月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
714 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
3月前
|
SQL 关系型数据库 MySQL
数据库:MYSQL参数max_allowed_packet 介绍
数据库:MYSQL参数max_allowed_packet 介绍
375 2
|
6月前
|
分布式计算 关系型数据库 MySQL
MySQL超时参数优化与DataX高效数据同步实践
通过合理设置MySQL的超时参数,可以有效地提升数据库的稳定性和性能。而DataX作为一种高效的数据同步工具,可以帮助企业轻松实现不同数据源之间的数据迁移。无论是优化MySQL参数还是使用DataX进行数据同步,都需要根据具体的应用场景来进行细致的配置和测试,以达到最佳效果。
|
7月前
|
SQL 缓存 关系型数据库
|
6月前
|
存储 缓存 关系型数据库
Mysql/etc/my.cnf参数详解
以上只是 `/etc/my.cnf`中的部分参数,实际上,`/etc/my.cnf`中的参数非常多,可以根据具体的应用需求进行调整。
156 0
|
7月前
|
存储 关系型数据库 MySQL
MySQL 索引优化:深入探索自适应哈希索引的奥秘
MySQL 索引优化:深入探索自适应哈希索引的奥秘
|
7月前
|
存储 Oracle 关系型数据库
【MySQL技术内幕】3.1-参数文件
【MySQL技术内幕】3.1-参数文件
46 0
下一篇
开通oss服务