背景
这段时间公司新来了一个校招的小姐姐,来了之后一直在熟悉压测相关的,
经过了一段时间的压测,今天给我们做了一个分享,讲的确实挺好,挺全面,
参数啊结果都讲的挺不错的,但是,问题他这就来了:
在展示压测关于innodb_io_capacity参数值压测的时候,我人呆住了,
不论innodb_io_capacity的值变化多少,相同线程数量下,qps都是几乎完全相同的。
??????这就是我脑子当时的反应
没有任何变化,这一下子让我觉得不太可能,有问题
简单了解之后,压测的那台机器上数据库buffer_pool有300多g,机器总内存
500g,妥妥的高配机器
我最初的猜想就是buffer_pool太大,根本没有触发刷脏,所以导致innodb_io_capacity
参数根本就没有发挥作用。
带着这一系列的问题,就去查看了源码,好在源码这部分还算简单,搜索了一下主要和下面三个函数
有关系。
源码
一下源码中文注释都是我加上的有关于源码的英文注释翻译,
也有自己的理解注释,便于大家理解,其他都是源码内容并未改变
源码版本:5.7.33
源码位置:storage/innobase/srv/srv0srv.cc
内容:相关的定义
/*innodb主线程控制保持缓冲池中的脏页比例低于下列的值,但是在剧烈的高负载
更新插入下不一定能保持缓冲池中的脏页比例低于下列的值*/
/*
刷脏页的高水位,脏页比例到达该值回进行剧烈刷脏
相当于数据库中innodb_max_dirty_pages_pct参数,默认为75,单位百分比
*/
double srv_max_buf_pool_modified_pct = 75.0;