在MySQL 8.4 LTS 版本中哪些参数默认值发生变化?

在MySQL 8.4 LTS 版本中哪些参数默认值发生变化?
最新回答
一张萌脸祸害三年

2020-12-29 03:32:04

MySQL 8.4 LTS 版本的发布标志着MySQL的首个长期支持版本,重点在于功能淘汰、参数更新和bug修复。以下是对新版中默认参数调整的概览与解释:

自适应散列索引(AHI):此参数过去导致性能问题,有经验的DBA建议禁用。在数据稳定缓存于缓冲池时,AHI可能优化查询性能,但一旦涉及写操作、系统负载增高或无法缓存所需数据,AHI会成为性能瓶颈。为了确保更可预测的响应时间,建议禁用AHI。

innodb_buffer_pool_in_core_file:在支持MADV_DONTDUMP的系统上,此参数默认关闭,Linux 3.4之后开始支持MADV_DONTDUMP,故在许多发行版上默认关闭。大core文件可能导致问题,使用此参数前应了解相关参数`core_file`。

innodb_buffer_pool_instances:此参数值默认为2,基于逻辑CPU数量,当buffer pool大小为2GB(超过1GB)时。实例数量与buffer pool大小的关系为`(innodb_buffer_pool_size / innodb_buffer_pool_chunk_size) / 2`,而MySQL所在机器的逻辑CPU数量决定实际实例数。

innodb_doublewrite_files:此参数默认值描述在MySQL 8.0官方文档中可能不准确。实际使用中,与buffer pool实例数量关联性不大。在MySQL 8.0.32中,innodb_buffer_pool_instances为8,仅存在两个double write buffer文件。

innodb_change_buffering:此参数默认值修改为`none`,通过延迟对二级索引写入操作支持顺序I/O的技术,但在最新硬件上,随机I/O不再是问题。

innodb_doublewrite_pages:此参数在MySQL 8.0.32中默认值为4,若未显式设置,则默认为4。出于性能考虑,通常会设置较大值,现在默认值调整为128。

innodb_flush_method:在部署于Windows系统时默认值为`unbuffered`。官方建议O_DIRECT作为首选,绕过文件系统缓存,但根据实际测试情况选择最佳值。在某些情况下,如在ext4文件系统中使用`innodb_dedicated_server`和`O_DIRECT_NO_FSYNC`(经验丰富的DBA知道潜在问题)。

innodb_io_capacity和innodb_io_capacity_max:考虑到企业主要使用读写性能优越的RAIDs或SSD,旧版本中默认值可能需要调整。

innodb_log_buffer_size:较大的日志缓冲区使得大事务运行时无需在提交前将日志写入磁盘,减少磁盘I/O。

innodb_numa_interleave:此参数默认值在单NUMA节点环境中可能缺乏实用性。

innodb_page_cleaners:此参数设置为flush脏页从buffer pool实例的线程数量,执行flush列表和LRU刷新。

innodb_parallel_read_threads:默认值为4,基于logical processors除以8,适用于并行读取聚簇索引,但不适用于二级索引。

innodb_purge_threads:官方认为在小系统中,4个purge线程可能引发问题,针对这类系统,将默认值降至1是合理的。

innodb_read_io_threads:默认值为4,基于logical processors除以2。

innodb_use_fdatasync:在支持fdatasync()系统调用的平台上,启用此参数允许在操作系统刷新时使用fdatasync(),除非后续数据检索需要,否则fdatasync()调用不会刷新对文件元数据的更改,提供潜在性能优势。

temptable_max_ram:定义TempTable引擎在使用磁盘存储数据前可使用的最大内存,默认值为服务器可用内存总量的3%,最小和最大默认值范围为1-4GB。

temptable_max_mmap和temptable_use_mmap:定义当TempTable引擎占用内存量超过temptable_max_ram限制时,是否为内部内存临时表分配内存映射临时文件的空间。默认情况下,TempTable引擎会使用InnoDB磁盘上的内部临时表。

这些参数调整旨在优化性能、减少系统瓶颈,并提高MySQL在各种环境中的稳定性和效率。理解并调整这些参数以适应特定环境和工作负载需求,对于数据库管理至关重要。