2017数据库大会实录-MySQL核心参数含义的源码解析
如果没有设置自适应刷新参数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. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |