开头还是介绍一下群,如果感兴趣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 提高数值可以刷新的,但需要考虑具体的实际情况,尝试调节,不建议一开始就调节成较大的数值。