前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >master线程loop组成

master线程loop组成

原创
作者头像
爱学习的羊羊
发布2025-03-07 14:51:54
发布2025-03-07 14:51:54
780
举报

master线程loop组成

1.主循环(loop)

2.后台循环(backgroup loop)

3.刷新循环(flush loop)

4.暂停循环(suspend loop)

主循环过程(loop)

(主要操作来自每秒钟和每10秒钟的定时逻辑来处理)(定时偶有延迟,看负载情况)

每秒钟的操作过程

1.日志缓存刷新到磁盘(即使事务还没有被提交)

2.合并插入缓冲(是否执行也要考虑当前的io压力)

3.从缓冲池刷新一定量的脏页到磁盘(具体是否会刷新取决是否缓冲池中的比例 (buf_get_modified_ratio_pct)超过设置阈值(innodb_max_dirty_pages_pct))

4.当前如无其他活动,切换至background loop

每10秒的操作过程

1.刷新一定量脏页到磁盘

2.合并插入缓冲(是否执行也要考虑当前的io压力)

3.将日志缓冲刷新到磁盘(即使事务还没有被提交)

4.删除无用的undo页(进行update、delete这类操作时,之前的行会被标记为删除,但需要保持版本信息(一致性读的原因),innodb引擎判断事务系统中已被删除的行是否可删除,可以则将undo页直接删除)

5.刷新一定量的脏页到磁盘(具体是否会刷新取决是否缓冲池中的比例(buf_get_modified_ratio_pct)超过设置阈值(innodb_max_dirty_pages_pct))

后台loop(background loop)/(flush loop)

1.删除无用的undo页

2.合并插入缓冲(合并插入多个非聚簇索引,提高写入性能)

3.刷新一定量脏页

innodb版本master变更

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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • master线程loop组成
  • 主循环过程(loop)
    • 每秒钟的操作过程
    • 每10秒的操作过程
  • 后台loop(background loop)/(flush loop)
  • innodb版本master变更
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档