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、分享学习心得【知识点的广度和深度,算法有哪些坑,如何准备面试等等】