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秒的操作,其余的时间执行每秒的操作。

原文地址:https://www.cnblogs.com/wangb0402/p/12712276.html