1.主循环(loop)
2.后台循环(backgroup loop)
3.刷新循环(flush loop)
4.暂停循环(suspend loop)
(主要操作来自每秒钟和每10秒钟的定时逻辑来处理)(定时偶有延迟,看负载情况)
1.日志缓存刷新到磁盘(即使事务还没有被提交)
2.合并插入缓冲(是否执行也要考虑当前的io压力)
3.从缓冲池刷新一定量的脏页到磁盘(具体是否会刷新取决是否缓冲池中的比例 (buf_get_modified_ratio_pct)超过设置阈值(innodb_max_dirty_pages_pct))
4.当前如无其他活动,切换至background loop
1.刷新一定量脏页到磁盘
2.合并插入缓冲(是否执行也要考虑当前的io压力)
3.将日志缓冲刷新到磁盘(即使事务还没有被提交)
4.删除无用的undo页(进行update、delete这类操作时,之前的行会被标记为删除,但需要保持版本信息(一致性读的原因),innodb引擎判断事务系统中已被删除的行是否可删除,可以则将undo页直接删除)
5.刷新一定量的脏页到磁盘(具体是否会刷新取决是否缓冲池中的比例(buf_get_modified_ratio_pct)超过设置阈值(innodb_max_dirty_pages_pct))
1.删除无用的undo页
2.合并插入缓冲(合并插入多个非聚簇索引,提高写入性能)
3.刷新一定量脏页
1.随着磁盘技术的发展,存储设备逐渐拥有更高的io速度时,innodb提供了innodb_io_capacity的百分比来进行控制,可以自行调节调高,直到符合磁盘io吞吐
2.innodb_max_dirty_pages_pct(脏页站缓冲池的比例)最初的默认值过大,导致缓冲池脏页过多,数据库的恢复时间也就更长,所以在新版本中该参数的默认值被适当降低。同时也引入了参数innodb_adaptive_flushing(自适应刷新),除了满足脏页比例大于等于innodb_max_dirty_pages_pct之外,小于innodb_max_dirty_pages_pct的时候也会刷新脏页
3.在新版本中加入innodb_purge_batch_size(控制回收undo页的数量)
4.在新版本中将master线程刷新脏页的操作分离到page cleaner thread中,减轻了主线程的负担,也提高了系统的并发性能
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。