mysql master thread_Mysql的InnoDB引擎-3.CheckPoint技术、Master Thread

CheckPoint技术

数据库每次更新数据的时候都要将脏页刷新会磁盘,同时在事务提交中要先写重做日志,再修改页;在以上过程中发生宕机的,数据如何恢复,脏页刷新到哪里,为了解决这些问题,提出了checkPoint技术。

当数据库宕机的时候,数据库不需要重做左右日志,因为CheckPoint之前的页都已经刷新回磁盘,故数据库只需要对checkPoint之后的重做日志进行恢复,这样大大缩短了数据库恢复时间。

当缓冲池不够用的时候,根据LRU算法会溢出最近最少使用的页,若这些页为脏页,那么需要执行CheckPoint,将脏页刷新回磁盘。

重做日志不可用的时候,选择Flush列表中的脏页刷新回磁盘。

Master Thread 工作模式

Master Thread具有最高的线程优先级别。内部由多个循环组成:主循环(loop)、后台循环(backgroup loop)、刷新循环(flush loop)、暂停循环(suspend loop)。Master Thread会根据数据库的运行状态在四种循环中切换状态。

1.0版本之前

每秒操作:

日志缓冲刷新到磁盘,即使这个事务还没提交(总是)

合并插入缓冲(可能)

至多刷新100个InnoDB的缓冲池中的脏页到磁盘(可能)

如果没有当前用户活动,则切换到backgroup loop(可能)

每10秒的操作:

刷新100个脏页到磁盘(可能)

合并至多5个插入缓冲(总是)

将日志缓冲刷新到磁盘(总是)

删除无用的undo页(总是)

刷新100个或者10个脏页到磁盘(总是)

backgroup loop执行的操作:

删除无用的undo页(总是)

合并20个插入缓冲(总是)

跳回到祝循环(总是)

不断刷新100个页直到符合条件(可能,跳转到flush loop中完成)

1.2版本之前

在1.0版本基础上进行了部分优化:

合并插入缓冲时,合并插入缓冲的数量可以配置。(innodb_io_capacity值的5%)

在从缓冲区刷新脏页的时候,刷新脏页的数量可以进行配置。(innodb_io_capacity值)

1.2版本

为了减轻Master Thread 的压力,将刷新页的操作从Master Thread线程分离到一个单独的Page Cleaner Thread中。同时在InnoDB闲置的时候,会执行每10秒的操作,其余的时间执行每秒的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值