MySQL 8.0新特性 -- innodb_dedicated_server
2020-04-02 14:50 abce 阅读(1863) 评论(0) 编辑 收藏 举报在8.0中,innodb_dedicated_server默认是不开启的。开启后,innodb可以自动配置下面的参数:
·innodb_buffer_pool_size
·innodb_log_file_size
·innodb_flush_method
·innodb_log_files_in_group (MySQL 8.0.14)
官方只是建议在可以使用全部的系统资源的专用服务器上配置开启该参数。比如用于mysql的docker容器或专用的虚拟机上开启。
如果mysql和其它应用共享资源的话,是不建议开启该参数的。
自动配置原则:
·innodb_buffer_pool_size
根据专用内存大小进行配置。
专用内存大小 | innodb_buffer_pool_size |
小于1GB | 128mb(默认值) |
1GB--4GB | detected server memory * 0.5 |
大于4GB | detected server memory * 0.75 |
·innodb_log_file_size
从mysql8.0.14开始,根据buffer pool size的大小进行配置
buffer pool size | log file size |
小于8GB | 512mb |
8GB--128GB | 1024mb |
大于128GB | 2048mb |
·innodb_log_files_in_group
MySQL 8.0.14中,根据buffer pool size的大小进行自动配置(单位是GB)。
buffer pool size | log file number |
小于8GB | ROUND(buffer pool size) |
8GB--128GB | ROUND(buffer pool size * 0.75) |
大于128GB | 64 |
如果buffer pool size小于2GB,innodb_log_files_in_group最小值是2。
·innodb_flush_method
开启innodb_dedicated_server开启后,innodb_flush_method 被设置为 O_DIRECT_NO_FSYNC;如果O_DIRECT_NO_FSYNC不可用,innodb_flush_method就使用默认值。
InnoDB使用O_DIRECT刷新i/o,会略过操作系统的fsync()系统调用。
在mysql 8.0.14之前,该设置不适用于xfs、ext4文件系统,因为需要系统调用fsync()同步文件系统元数据。
从8.0.14开始,创建一个新的文件后、增加文件大小后、或关闭文件后,就会调用fsync(),确保文件系统元数据被同步。但是没次写操作仍然会略过fsync()系统调用。
1 | Data loss is possible if redo log files and data files reside on different storage devices, and a crash occurs before data file writes are flushed from a device cache that is not battery-backed. If you use or intend to use different storage devices for redo log files and data files, and your data files reside on a device with a cache that is not battery-backed, use O_DIRECT instead . |
如果开启了自动配置的同时,显式配置上面的参数,在启动的时候会给出下面的提醒信息:
1 | [Warning] [000000] InnoDB: Option innodb_dedicated_server is ignored for innodb_buffer_pool_size because innodb_buffer_pool_size=134217728 is specified explicitly. |
一个选项的显式配置并不会阻止其他选项的自动配置。
如果开启了innodb_dedicated_server,同时显式配置了innodb_buffer_pool_size。
innodb_log_file_size和innodb_log_files_in_group仍然根据buffer pool size的大小进行配置,但是这里的buffer pool size仍然是根据专用内存的大小估算的,哪怕实际配置给buffer pool的大小不是专用内存的大小。
每次重启后,mysql会根据需要自动重新配置变量的值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)