加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 服务器 > 安全 > 正文

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

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

再接下来,通过上面的计算,我们从不同维度分别得出三个建议刷新的数量:分别为当前的脏页刷新的平均速度,也就是一秒钟刷新了多少脏页;根据脏页百分比,以及活跃日志量的大小,以及所设置的innodb_io_capacity 参数所得出建议刷新的数量;以及根据重做日志产生速度计算得出的建议刷新数量.将这三个值相加之后再平均,得出的就是考虑了上面所有因素的一个综合建议,由变量n_pages保存.

接下来,这个建议刷新的总量n_pages会跟innodb_io_capacity_max这个参数进行比较,也就是建议刷新的总量最大不能超过所设置的磁盘最大随机io能力.

最后,生成最终的刷新建议.生成最终的刷新建议时,会考虑当前数据库的活跃日志量的大小,当前活跃日志比较少的时候,认为重做日志文件有足够可以使用的空间(以变量pct_for_lsn小于30为依据),则不需要考虑每个buffer pool 之间的脏页年龄分布不均的情况,每个buffer pool 刷新相同的数量,数量就刷新总量除以buffer pool的个数.如果活跃日志比较多(以变量pct_for_lsn大于等于30为依据),则需要考虑脏页的年龄在每个buffer pool的分布不同,每个buffer刷新不同的数量的脏页,老的脏页比较多的buffer pool instance刷新的数量也就多.

以上就是建议函数生成刷新建议时的计算流程,下面根据源码来分析如何具体考虑这些因素,以便让我们有非常直观的理解.

首先来计算平均值,前面已经有比较清楚的讲过,现在大家来简单地看一下这部分代码,主要请关注这个if条件:当循环次数达到innodb_flush_avg_loops时或者经历的时间达到该值时,才进行新的平均值的计算.因此,大家清楚了这个参数的含义,是用来指明隔多久计算一次平均值.平均值计算规则就是新平均速度=当前的平均速度+最近这段期间平均速度,再除以2 .

接下来这一段代码呢,是首先计算lsn的age,也就是活跃日志量的大小,然后调用相关函数根据脏页百分比来计算io_capacity的百分比,用变量pct_for_dirty保存,然后根据活跃日志量的大小来计算io_capacity的百分比,用变量pct_for_lsn来保存,这个值后面会被是使用到,用来决定每个buffer pool是建议刷新相同的数量的脏页,还是刷新不同的数量.当pct_for_lsn<30的时候,建议每个buffer刷新相同数量的页面.否则,建议刷新不同数量的页面.

最后比较这两个变量的大小,大的值作为最终的io_capacity的百分比,用变量pct_total保存.接下来我们将来看看是如何具体跟据这两项来计算io_capacity的百分比的.

函数af_get_pct_for_dirty()的计算逻辑是:

首先获取缓存池的脏页百分比,然后根据这个值进行判断.

如果参数最大脏页百分比的低水位设置为0(默认值),当dirty_pct大于参数innodb_max_dirty_pages_pct,则返回100,否则返回0 .

如果设置了最大脏页百分比的低水位,当脏页百分比超过该值时,则返回相应的比例.当脏页百分比越接近最大脏页百分比,返回比例越接近100.? 否则为0.

再来看看根据lsn的age,即活跃日志量来计算io_capacity百分比的规则.

如果活跃日志量占日志文件大小的百分比小于参数innodb_adaptive_flushing_lwm,即自适应刷新的低水位,默认是10,则直接返回0.

(编辑:辽源站长网)

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

推荐文章
    热点阅读