Master Thread

该节解释不同版本Master Thread的具体实现和存在的问题

1、InnoDB 1.0版本之前【Mysql5.1版本之前】

注释:

1、Master Thread具有最高的线程优先级别

2、Master Thread内部由多个循环Loop组成:主循环loop、后台循环backgroup loop、刷新循环flush loop、暂停循环suspend loop

3、Master Thread会根据数据库的运行状态在loop、backgroup loop、flush loop、suspend loop之间进行切换

1.1、loop主循环的操作

注释:在 负载很大的情况下可能会有延迟

每秒钟的操作

1、日志缓冲刷新到磁盘,即使这个事务还没有提交【总是发生】

2、合并插入缓冲【可能发生】【InnoDB会判断当前一秒内发生的IO次数是否小于5次,如果小于5次,InnoDB认为当前IO压力较小,可以执行合并插入缓冲】

3、至多刷新100个InnoDB的缓冲池中的脏页到磁盘【可能发生】【InnoDB通过判断当前缓冲池中脏页的比例(buf_get_modified_ratio_pct)是否超过配置文件中的参数值(innodb_max_dirty_pages_pct),如果超过阈值,InnoDB会认为需要做磁盘同步操作,将刷新100个脏页到磁盘中】

4、如果当前没有用户活动,则切换到backgroup loop【可能发生】

每10秒的操作

操作过程

第一步:InnoDB先判断过去10秒之内磁盘的IO操作是否小于200次,如果小于,InnoDB认为当前有足够的磁盘IO操作能力,然后将100个脏页刷新到磁盘;

第二步:InnoDB存储引擎会合并插入缓冲

第三步:InnoDB将日志缓冲刷新到磁盘中

第四步:InnoDB执行full purge操作,删除无用的undo页;对表中的update,delete这类操作,原先的行被标记为删除,因为一致性读的关系,需要保留这些行的版本信息;在full purge操作过程中,InnoDB会判断当前事务中已被删除的行是否可以删除,如果此时有其他查询操作需要读取之前版本的undo信息,则暂时不删除;如果可以删除,InnoDB会立即将其删除

第五步:InnoDB会判断 缓冲池中的脏页比例【buf_get_modified_ratio_pct】,如果超过70%的脏页,则刷新

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

八股文+场景题+算法真题 文章被收录于专栏

Java全新整理八股文 + 场景题 + 算法 精心设计,面试命中率超过80% 专栏优势: 1、问题和答案已经整理到位,答案更专业,可以直接回答,不需要额外总结! 2、场景题讲解清晰,适用于大部分场景的项目,并且持续更新中 3、分享学习心得【知识点的广度和深度,算法有哪些坑,如何准备面试等等】

全部评论

相关推荐

会员标识
02-06 14:14
牛客运营
第一课:忠义第二课:忘本第三课:背刺
Java抽象带篮子:你们牛客运营这么自由的吗?
点赞 评论 收藏
分享
2024-12-21 10:42
已编辑
江西软件职业技术大学 Java
新宿站不停:该提升学历就提升学历,菜了就多练。没事找牛马公司虐自己是吧? 谁没事说自己“经验少”,这不自己把自己塞剎鼻hr嘴里找🐴吗
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务