暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

MySQL8.0 自动全局配置innodb_dedicated_server

原创 CuiHulong 2023-07-25
943

MySQL默认安装下配置的启动参数少的可怜,核心的参数基本都没有。本身提供的硬件资源局限,所以新部署MySQL需要合理的配置全局内存,底层基础日志文件。对于分配多少合适,通常有经验的DBA,都有一些个人心得。

到MySQL8.0版本之后,提供了一个自动分配的机制。当innodb_dedicated_server开启时,InnoDB会自动配置以下3个变量,也解决了部分小白配置,自动配置会在每次MySQL服务启动时进行评估和重新配置。

innodb_buffer_pool_size

全局内存包含data,index 信息。官方给出的规则如下:

服务器内存大小 buffer_pool_size大小
一档 Less than 1GB 128MB (the default value)
二挡 1GB to 4GB detected server memory * 0.5
三挡 Greater than 4GB detected server memory * 0.75

按照个人经验来说内存50%~75%还是非常合理的。但一些经验老到的DBA看来,高负载下还是存在一些风险。更改如下:

服务器内存大小 buffer_pool_size大小
一档 Less than 1GB 128MB (the default value)
二挡 1GB to 16GB detected server memory * 0.5
三挡 Greater than 16GB detected server memory * 0.75

innodb_redo_log_capacity

配置Redo log文件大小。
1.在MySQL 8.0.30之前,使用innodb_log_file_size和innodb_log_files_in_group参数

服务器内存大小 Redo Log 大小
Less than 8GB 512MB
8GB to 128GB 1024MB
Greater than 128GB 2048MB
服务器内存大小 Redo Log 大小
Less than 8GB round(buffer pool size)
8GB to 128GB round(buffer pool size * 0.75)
Greater than 128GB 64

备注:2~4个个文件 每个文件1G大小。

2.在MySQL 8.0.30之后 ,有innodb_redo_log_capacity 生成临时文件方式代替

服务器内存大小 Buffer Pool Size Redo Log 大小
Less than 1GB 不设置 100MB
Less than 1GB Less than 1GB 100MB
1GB to 2GB Not applicable 100MB
2GB to 4GB 不设置 1GB
2GB to 4GB Any configured value round(0.5 * detected server memory in GB) * 0.5 GB
4GB to 10.66GB Not applicable round(0.75 * detected server memory in GB) * 0.5 GB
10.66GB to 170.66GB Not applicable round(0.5625 * detected server memory in GB) * 0.5 GB
Greater than 170.66GB Not applicable 128GB

备注:这里没多大要求就32G = 32个文件* 每个1G 就完全够用。

innodb_flush_method

将数据刷新到InnoDB数据文件和日志文件的方法。包含fsync,O_DSYNC,O_DIRECT 等方式
当启用innodb_dedicated_server时,刷新方法设置为O_DIRECT_NO_FSYNC

  • 在MySQL 8.0.14之前,这个设置不适合像XFS和EXT4这样的文件系统,需要使用fsync()系统调用来同步文件系统元数据的更改。
  • 从MySQL 8.0.14开始,fsync()在创建新文件、增加文件大小和关闭文件后被调用,以确保文件系统元数据的更改被同步。在每次写操作之后,fsync()系统调用仍然被跳过。

如果重做日志文件和数据文件驻留在不同的存储设备上,并且在从没有电池支持的设备缓存刷新数据文件之前发生意外退出,则可能会丢失数据。如果使用或打算使用不同的存储设备来存储重做日志文件和数据文件,并且数据文件驻留在具有不支持电池的缓存的设备上,则需要使用O_DIRECT。

总结:

按照官方说明,只有当MySQL实例位于专用服务器上,独享所有可用的系统资源时,才考虑启用。如果MySQL实例与其他应用程序共享系统资源,不建议启用innodb_dedicated_server。

一些场景不适用:

  • 单机多实例情况下不适应。
  • 非Innodb为引擎的不适用
  • 不同应用共享部署情况

当然不管专属,还是混合下这个参数都不适用,需要按照需求部署。

最后修改时间:2025-01-07 12:30:49
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论