MySQL 8 那些新来的参数,给那些快被淘汰的MYSQL DBA

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(共2200人左右 1 + 2 + 3 + 4 +5) 新人奖直接分配到5群,另欢迎 OpenGauss 的技术人员加入。

MySQL 8 已经有很长一段时间提供生产服务器,可还有不少企业在使用MYSQL 5.7 设置5.6 等版本的MYSQL 系统,且不少的MYSQL的DBA 对于MYSQL 的知识还停留在MYSQL5.7并不愿意将知识更新到MYSQL8 ,MYSQL知识快速更新的过程中淘汰这样的DBA 是容易的事情。后面这个可能会做一个系列,不断对比MYSQL5.6 5.7 和 MYSQL8.0 之间的差异,今天我们来说说mysql 8 的一些与核心有关在MYSQL8 变动的系统变量和参数。

我们将这些参数根据版本来进行划分,这里我们逐条分析

innodb_temp_tablespaces_dir (8.0.13)

innodb_log_checkpoint_fuzzy_now (8.0.13) 不建议调节

innodb_fsync_threshold (8.0.13)

innodb_parallel_read_threads (8.0.14)

innodb_buffer_pool_in_core_file ( 8.0.14 ) 不建议调节

innodb_spin_wait_pause_multiplier (8.0.16)

innodb_redo_log_archive_dirs (8.0.17)

innodb_idle_flush_pct (8.0.18)

innodb_doublewrite_batch_size (8.0.20)

innodb_doublewrite_dir (8.0.20)

innodb_doublewrite_files (8.0.20)

innodb_doublewrite_pages (8.0.20)

innodb_fsync_threshold (8.0.13)

我们先从这个参数说起,在数据从MySQL到磁盘中是间隔着,操作系统的缓存的,而如果系统有缓存,缓存是多长时间进行数据的刷新是一个问题,默认的情况下参数为0 ,默认的情况下是数据文件完整的在系统缓存中存在后,才能进行数据的刷新到磁盘的工作,而在一些大的数据文件产生的时候,如果能挑战触发的阈值让刷新更频繁的进行,有利于降低IOPS 的瞬时的高度。

这里单位的字节,而且这个值需要在磁盘系统较差的系统中进行调节,调节可以进行多次的调节,找到合适的值,比如100MB 开始,逐步增加。

innodb_temp_tablespaces_dir

这个变量的出现,说明MySQL 开始在对自己临时表产生的位置进行变化,为提高系统的性能在这方面提供了可能性,并且这部分的变化后在8.016 还进行更大的变化,在你设置后,并重启MYSQL 将临时表的表空间设置到你指定的磁盘位置和目录。

innodb_parallel_read_threads

从MySQL 8.014开始,MySQL开始针对之前大家吐槽的查询的效率的问题,进行变动,这个参数就是要进行相关的工作,在查询中对于主键的读取的并行度可以开始调节,这里范围在 1 -256 默认为4 ,在读取主键的时候会有更多的并行读取的,在扫描这些数据的时候,会将其读入到缓冲区页面被保存在LRU列表的尾部,方便在空闲的时候将这些数据进行抛弃。

并且在这个版本中发现一些问题,并在8.017版本对这个部分进行了修整,当读取的线程达到 256 ,以客户端链接线程作为一个评价,当到达这个值,则这个并行度的值会自动失效,读取将还以单线程为准。

innodb_spin_wait_pause_multiplier

在之前MYSQL 有一个innodb_spin_wait_delay来对于自旋锁的轮训之间的最大间隔进行调节的参数,在8.016 这里对于之前的参数的灵活性进行变动,之前没有这个参数 innodb_spin_wait_delay 进行延迟是执行的PAUSE 是写死的,而这个参数给了1-100的选择,也就是之前的参数需要乘以这个参数后,得到具体的自旋锁等待的时间。默认这里是50

innodb_redo_log_archive_dirs

在8.017 的MySQL 开始对于物理数据库的副本进行了改动,怎么快速产生一个MYSQL的副本,而不是在用BINLOG 来进行工作,这是一个MYSQL 不被当成一个数据库业界在数据副本产生时,不作为一个笑柄的开始,所以要针对redo log进行留存,为后续的一些可能性做前期的铺垫。

innodb_idle_flush_pct

在8.018 这个值的出现,说明对于MYSQL来说,系统性能尤其在数据刷新方面的优化还在进行,这个值就是为了在数据库空闲期间控制磁盘刷新的比率的,默认是100,当设置低于100,将会降低数据刷新脏页的百分比,这里不建议不了解的情况下对这个值进行变动。变动会导致突发情况丢失数据的可能性。

接下来在8.020 针对一直吐槽的 dw 进行了一些参数的提出

innodb_doublewrite_batch_size

innodb_doublewrite_dir

innodb_doublewrite_files

innodb_doublewrite_pages

innodb_doublewrite_dir

innodb_doublewrite_files

这两个参数一看就可以看出是针对DW的文件的位置和文件进行配置,提DW文件的灵活性。

而innodb_doublewrite_batch_size 和 innodb_doublewrite_pages 算是一体的,通过对于innodb_doublewrite_pages 参数的状态来监控,发现刷新的页面数量的多少来判断是否有必要对于 innodb_doublewrite_batch_size 进行调整,举例你发现当 innodb_doublewrite_pages 待写的pages 如果数量每次查看都较大,就可以提高 innodb_doublewrite_batchsize 的数量提高双,写机制的效率。这个数值调节在0.256 ,默认为0 提高数值可以刷新的,但需要考虑具体的实际情况,尝试调节,不建议一开始就调节成较大的数值。

相关推荐
做梦敲代码11 分钟前
达梦数据库-读写分离集群部署
数据库·达梦数据库
苹果醋31 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行1 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger1 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud1 小时前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡1 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷1 小时前
Redis
数据库·redis·缓存
仰望大佬0072 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名2 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库