Master Thread 工作方式
master thread主要在四个循环中工作:
第一个是主循环loop:
loop:
for(int i = 0 ;i<10;i++)
{
//每秒钟发生的
睡眠一秒
将日志缓存刷新到磁盘里,和事务完成情况无关,这个操作会必做(必做)
如果一秒钟的io次数小于5,证明压力不大,这时候会做合并插入缓存,说白了就是,把插入数据的操作积攒起来一起执行(执行需要条件一秒钟的io次数是否小于5)
最多刷新100个脏页到磁盘中(执行的条件就是,buf_get_modified_ratio_pct >阈值,默认为90,buf_get_modified_ratio_pct为当前缓冲池脏页的比例),也就是说如果脏页太多就会执行一下
检查是否没有用户操作了,如果没有了跳到第二个循环(条件是没有用户操作了)
}
//每十秒发生的
刷新100个脏页到磁盘(条件为10秒以内io小于200次)
合并最多五个插入缓存(必做)
将操作日志缓存刷新到磁盘(必做)
将无用的undo页删除(必做)
如果buf_get_modified_ratio_pct大于70% 刷新100个脏页小于70%刷新10个脏页
最后重新循环loop
第二个循环background loop:
background loop
删除无用的undo页(必做)
合并20个插入缓存(必做)
如果有事情可做就跳转到主循环loop
如果没有事可以做跳转到flush loop
第三个循环 flush_loop
刷新100个脏页到磁盘
如果buf_get_modified_ratio_pct>阈值 循环flush loop
如果不大于 就跳转suspend loop
第四个循环 suspend loop
等待事情发生 跳去主页面