加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

2017数据库大会实录-MySQL核心参数含义的源码解析

发布时间:2021-01-17 07:27:51 所属栏目:安全 来源:网络整理
导读:《2017数据库大会实录-MySQL核心参数含义的源码解析》要点: 本文介绍了2017数据库大会实录-MySQL核心参数含义的源码解析,希望对您有用。如果有疑问,可以联系我们。 5月11-13日在北京国际会议中心举行数据库大会,有幸得友人推荐在大会上讲了一场.源于自己

如果没有设置自适应刷新参数innodb_adaptive_flushing_lwm,默认为on,则需要等待活跃的日志量大于max_async_age的值,才会返回相应的百分比,否则返回0.可以简单的理解为,如果没有开启自适应刷新,则必须等待活跃日志量的过大,大到存在危害数据库的可用性风险时,才开始考虑基于活跃日志量的大小来进行脏页刷新.

如果开启了自适应刷新,活跃日志量所占百分比大于自适应刷新的低水位时(innodb_adaptive_flushing_lwm),返回相应的百分比.具体计算公式查看ppt上的内容.

接下来,我们来看看是怎么根据重做日志的生成速度来计算每个buffer需要刷新多少脏页的.这一段代码,不涉及数据库的任何参数,代码的功能就是根据重做日志生产的速度,来计算每个buffer需要刷新多少页面以及所有buffer pool所建议刷新的总量,但这个不是最终的建议.

首先,根据前面计算得出的lsn_avg_rate,即重做日志产生的平均速度,计算出一个target_lsn号.

然后从每一个buffer pool的脏页列表的队尾开始取出脏页,将脏页的old_modifiaction(最小的lsn)跟target_lsn进行比较,这里简单的说明一下脏页的oldest_modification的含义,它表示的是脏页第一次修改时的lsn号,也就是脏页的最小lsn号.如果它小于target_lsn,然后将其作为刷新对象进行计数,否则,退出这个buffer pool 内的循环.因为刷新列表时按照脏页的最小lsn号进行排序的,前面的脏页的最小lsn都大于target_lsn,所以不需要再继续找下去.

从上面的计算方式可以看出,当重做日志生成的平均速度越大,target_lsn 就越大,同时,如果buffer_pool中的脏页的old_modition小于target_lsn的数量越多,也就是老的脏页越多,被建议刷新的页面就越多.

这张ppt上一张ppt代码段的注释.

生成最终的刷新建议.

通过前面的计算,我们从不同维度分别得出三个建议刷新的数量,然后将这个三个值进行平均,得出了综合所有因素的一个刷新建议总量,由变量n_pages保存.

影响刷新总量的因素有:脏页的百分比,活跃日志量的大小,当前redo生成的平均速度,当前脏页刷新平均速度,以及脏页的age分布情况,以及参数innodb_io_capacity,innodb_io_capacity_max.

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读