CMS网站建设实战试题,建设网站 创建数据库,怎么识别网站是用什么语言做的,免费手机网站商城MySQL 8.4 LTS 版本#xff0c;我们一共修改了 20 个 InnoDB 变量的默认值。 作者#xff1a;Frederic Descamps#xff0c;EMEA 和亚太地区的 MySQL 社区经理。于 2016 年 5 月加入 MySQL 社区团队。担任开源和 MySQL 顾问已超过 15 年。最喜欢的主题是高可用和高性能。 本…MySQL 8.4 LTS 版本我们一共修改了 20 个 InnoDB 变量的默认值。 作者Frederic DescampsEMEA 和亚太地区的 MySQL 社区经理。于 2016 年 5 月加入 MySQL 社区团队。担任开源和 MySQL 顾问已超过 15 年。最喜欢的主题是高可用和高性能。 本文和封面来源https://lefred.be爱可生开源社区翻译。 本文约 2400 字预计阅读需要 8 分钟。 2024 年 4 月 30 日MySQL 8.4第一个 LTS 版正式发布也验证了 Oracle 官方在之前宣布的 MySQL 版本发布节奏。
什么是 LTS 版目前还有哪些版本
目前MySQL 的发布模型分为两个主要路径LTS 版长期支持和创新版。所有 LTS 和创新版本都包含错误和安全修复并被视为生产级质量。更多MySQL 版本介绍 什么情况适合 LTS 版
需要稳定的功能和更长的支持期。除了第一个 LTS 版本删除了一些功能其他版本仅包含必要的修复不在删除功能。LTS 版本遵循 Oracle 终身支持政策5 年主要支持和 3 年延长支持。
什么情况适合创新版
想了解最新功能、改进。适合快节奏开发环境中的开发和 DBA具有更高水平的自动化测试和现代持续集成技术可实现更快的升级周期。除新功能外随着代码重构、删除不推荐功能以及修改 MySQL 使其更符合 SQL 标准在 LTS 版本中不会发生。支持至下一个创新版。
MySQL 各版本的生命周期 请参考 Oracle 官方提供的 MySQL 各版本生命周期计划20240430以更好地安排您生产环境的 MySQL 版本选择。
以下内容为 MySQL 社区经理 Frederic Descamps 对该版本中 InnoDB 参数默认值修改的详细介绍。
发布于当地时间 2024 年 5 月 1 日 昨天4/30MySQL 的第一个 LTS 版本 MySQL 8.4 发布了。
许多弃用的内容最终被删除并且几个 InnoDB 变量默认值已被修改以匹配当前的工作负载和硬件规格。
有 20 个 InnoDB 变量的默认值已被修改
让我们看一下这些变量并解释这样修改的原因
被修改默认值的 InnoDB 变量
innodb_buffer_pool_in_core_file
版本默认值8.4 之前ON8.4 LTS如果支持 MADV_DONTDUMP 为 OFF否则 ON
MADV_DONTDUMP 是 Linux 3.4 及更高版本中支持的宏存在“ sys/mman.h”头文件并包含符号 MADV_DONTDUMP一个 madvise() 的 non-POSIX 扩展Windows 系统或大多数 MacOS 系统不支持此宏。
总之这意味着默认情况下在 Linux 系统上缓冲池的内容不会转储到核心文件中。
innodb_buffer_pool_instances
版本默认值8.4 之前8如果 BP 1 GB则为 18.4 LTS如果 BP 1 GB1 如果 BP 1 GB则为 1-64 范围内的最小值a. (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size) / 2 b. 1/4 可用逻辑处理器
旧值 8 在某些系统上可能太大。手册中包含 BP 大小计算的好示例请参阅 配置 InnoDB 缓冲池大小。
innodb_change_buffering
版本默认值8.4 之前all8.4 LTSnone
Change Buffer 是一种通过延迟对二级索引的写入操作来支持顺序 I/O 的技术。在最新的硬件上随机 I/O 不再是问题。
innodb_dedicated_server
版本默认值8.4 之前OFF8.4 LTSOFF
从 MySQL 8.0 开始当 MySQL 运行在可供数据库使用的所有资源的专用服务器上时我们建议启用此变量并且不要手动修改 InnoDB 设置。
该变量的默认值是相同的但是通过启用 innodb_dedicated_server 控制的变量是不同的。
innodb_buffer_pool_size 128MB 是服务器内存小于 1GB。如果服务器内存在 1GB 到 4GB 之间则检测到的服务器内存 * 0.5。如果服务器内存超过 4GB则检测到的服务器内存 * 0.75。 innodb_redo_log_capacity:可用逻辑处理器数量/2GB最大 16GB。
当 innodb_dedicated_server 启用时innodb_flush_method 不会自动配置。
innodb_adaptive_hash_index
版本默认值8.4 之前ON8.4 LTSOFF
AHIInnoDB 自适应哈希索引长期以来一直是一些性能问题的原因。每个经验丰富的 DBA 总是建议禁用它就像旧的查询缓存一样。我很惊讶没有像 Domas Mituzas 的查询缓存调优器那样的 AHI 调优器
当没有数据发生更改并且完全缓存在缓冲池中时AHI 可能会对读查询 (SELECT) 提供一些好处。一旦有写入操作或者系统负载较高或者读取所需的所有数据都无法缓存自适应哈希索引就会成为巨大的瓶颈。
为了获得更可预测的响应时间建议禁用它。
innodb_doublewrite_files
版本默认值8.4 之前innodb_buffer_pool_instances * 28.4 LTS2
之前默认值是根据缓冲池的数量计算的为了简化现在默认为 2。
相关文档 指出该值定义每个缓冲池的双写文件数。但我的印象是它是全局的与缓冲池实例的数量无关。
从 MySQL 错误日志来看
2024-05-01T05:43:03.226604Z 1 [Note] [MY-012955] [InnoDB] Initializing buffer pool, total size 2.000000G, instances 2, chunk size 128.000000M
[...]
2024-05-01T05:43:03.288068Z 1 [Note] [MY-013532] [InnoDB] Using ./#ib_16384_0.dblwr for doublewrite
2024-05-01T05:43:03.295917Z 1 [Note] [MY-013532] [InnoDB] Using ./#ib_16384_1.dblwr for doublewrite
2024-05-01T05:43:03.317319Z 1 [Note] [MY-013532] [InnoDB] Using ./#ib_16384_0.bdblwr for doublewrite
2024-05-01T05:43:03.317398Z 1 [Note] [MY-013566] [InnoDB] Double write buffer files: 2
2024-05-01T05:43:03.317410Z 1 [Note] [MY-013565] [InnoDB] Double write buffer pages per instance: 128
2024-05-01T05:43:03.317423Z 1 [Note] [MY-013532] [InnoDB] Using ./#ib_16384_0.dblwr for doublewrite
2024-05-01T05:43:03.317436Z 1 [Note] [MY-013532] [InnoDB] Using ./#ib_16384_1.dblwr for doublewrite
我们看到我们有 2 个缓冲池实例但仍然只有 2 个双写缓冲文件。根据文档我期望 4 。第三个文件 #ib_16384_0.bdblwr 是在 innodb_doublewrite 设置为 DETECT_ONLY 时创建的。
使用 DETECT_ONLY 时只有元数据会写入双写缓冲区。数据库页内容不会写入双写缓冲区并且恢复不会使用双写缓冲区来修复不完整的页写入。此轻量级设置仅用于检测不完整的页面写入。
innodb_doublewrite_pages
版本默认值8.4 之前innodb_write_io_threads默认为 48.4 LTS128
从测试结果和出于对性能的角度考虑我们意识到默认值越大越好经常建议增加它。
innodb_flush_method
版本默认值8.4 之前fsync8.4 LTSO_DIRECT (或 fsync)
当支持时O_DIRECT 始终是首选值我们建议使用它绕过文件系统缓存将 InnoDB 更改刷新到磁盘对于数据文件和日志文件。
如果不支持 O_DIRECT*我们使用旧的 *fsync 方法。这是针对 Unix 的在 Windows 上默认值是 unbuffered。
innodb_io_capacity
版本默认值8.4 之前2008.4 LTS10000
对于最近的系统RAID、SSD 等默认 I/O 容量太低。由于该变量定义了 InnoDB 后台操作可用的 IOPS 数量因此值太低会限制性能。
innodb_io_capacity_max
版本默认值8.4 之前2 * innodb_io_capacity最小 20008.4 LTS2 * innodb_io_capacity
如果 InnoDB 需要更积极地刷新则此变量定义 InnoDB 可用于执行后台操作的最大 IOPS 数。新的默认值更简单因为它只是 innodb_io_capacity 的两倍。
innodb_log_buffer_size
版本默认值8.4 之前16MB8.4 LTS64MB
我们增加了默认值因为大的日志缓冲区允许大型事务运行而无需在事务提交之前将日志写入磁盘。
innodb_numa_interleave
版本默认值8.4 之前OFF8.4 LTSON
当系统支持 NUMA 时新的默认值在分配 InnoDB 缓冲池期间将 mysqld 的 NUMA 内存策略设置为 MPOL_INTERLEAVE 。此操作随机平衡所有 NUMA 节点的内存分配从而在这些节点之间实现更好的分布。
当然只有当您的系统具有多个 NUMA 节点时您才能从中受益。
这是验证节点数量的方法
$ numactl --hardwareavailable: 2 nodes (0-1)node 0 size: 16160 MBnode 0 free: 103 MBnode 1 size: 16130 MBnode 1 free: 83 MBnode distances:node 0 1 0: 10 20 1: 20 10
在上面的例子中我们可以看到 CPU 有两个节点。
您还可以使用 lstopo 显示架构并显示 NUMA 核心。这是另一个例子 innodb_page_cleaners
版本默认值8.4 之前48.4 LTSinnodb_buffer_pool_instances
新的默认设置是使用与缓冲池实例一样多的线程从缓冲池实例中刷新脏页。
innodb_parallel_read_threads
版本默认值8.4 之前48.4 LTS逻辑处理器 / 8最少 4 个
出于性能原因在具有大量逻辑 CPU 的系统上用于并行聚集索引读取的线程数会自动增加。
innodb_purge_threads
版本默认值8.4 之前48.4 LTS如果逻辑处理器 16则为 1否则为 4
对于具有大量 (16) vCPU 的系统此变量也会以某种方式自动配置。但我们也意识到在某些较小的系统上拥有 4 个清除线程可能会出现问题。对于这样的系统我们将默认值减少到 1。
innodb_read_io_threads
版本默认值8.4 之前48.4 LTS逻辑处理器 / 2最少 4 个
如果系统有超过 8 个 vCPU该变量也会自动增加。
innodb_use_fdatasync
版本默认值8.4 之前OFF8.4 LTSON
在支持它的系统上除非需要否则 fdatasync() 的调用不会刷新对文件元数据的更改。这提供了性能优势。
temptable_max_ram
版本默认值8.4 之前1GB8.4 LTS总内存的 3%1-4GB 范围内
如果系统受益于大量内存默认值现在会自动增加。但默认上限为 4GB。因此对于内存超过 132GB 的系统默认情况下 temptable_max_ram 的值将设置为 4GB。
temptable_max_mmap
版本默认值8.4 之前1GB8.4 LTS0禁用
新的默认设置禁止从内存映射临时文件分配内存不在 tmpdir 中创建文件。
temptable_use_mmap
版本默认值8.4 之前ON8.4 LTSOFF
当 temptable_use_mmap 被禁用新默认设置时TempTable 存储引擎会使用 InnoDB 磁盘上的内部临时表而不是在 temptable_max_ram 变量定义的限制被超过时在 tmpdir 中为内部内存临时表分配空间作为内存映射的临时文件。
总结
通过这个全新版本的 MySQL第一个 LTS我们有机会更改某些 InnoDB 变量的默认值使它们更符合生产服务器的实际情况。
有些现在可以自动调整以更好地匹配 MySQL 运行的系统。
享受 MySQL 并享受新的默认设置
更多技术文章请访问https://opensource.actionsky.com/
关于 SQLE
SQLE 是一款全方位的 SQL 质量管理平台覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库为开发和运维提供流程自动化能力提升上线效率提高数据质量。
SQLE 获取
类型地址版本库https://github.com/actiontech/sqle文档https://actiontech.github.io/sqle-docs/发布信息https://github.com/actiontech/sqle/releases数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse