InnoDB1.0.x版本之前
Master Thread具有最高的线程优先级别,内部由多个循环组成主循环(loop)后台循环(backgroud)刷新循环(flush)暂停循环(suspend),Master Thread会根据数据库运行的状态在这几个循环中切换。
loop主循环
大多数的操作是在这个循环中进行的,其中有两大部分的操作——每秒钟和每十秒的操作。每秒钟和每十秒的操作是不精确的,在负载很大的情况下可能会有延迟,只能说大概在这个频率下。
每秒一次的操作包括:
- 日志缓冲刷新到磁盘,即使这个事务还没有提交(总是)
事务没有提交,InnoDB仍然每秒会将重做日志缓冲中的内容刷新到重做日志文件,这可以很好的解释大事务提交时间短的原因。 - 合并插入缓冲(可能)
合并插入缓冲(Insert Buffer)并不是每秒都会发生的。InnoDB会判断前一秒的IO次数是否小于5次,小于则进行合并缓冲的操作。 - 至多刷新100个InnoDB的缓冲池的脏页到磁盘(可能)
不是每秒都会发生,InnoDB会判断当前缓冲池中脏页的比例是否超过了配置文件中的参数(innodb_max_dirty_pages_pct),如果 超过了这个法治,InnoDB会认为需要做磁盘同步的操作,将100个脏页写入磁盘中。 - 如果当前没有用户活动,则切换到background loop(可能)
每十秒的操作包括: - 刷新100个脏页到磁盘(可能)
InnoDB会判断过去10秒钟内磁盘到IO操作是否小于200次,如果是,InnoDB将100个脏页刷新到磁盘。 - 合并至多5个插入缓冲(总是)
InnoDB会合并插入缓冲。 - 将日志缓冲刷新到磁盘(总是)
InnoDB在进行一次将日志缓冲刷新到磁盘的操作,这和每秒一次时发生的操作是一样的。 - 删除无用的undo页(总是)
InnoDB会执行full purge操作,删除无用的Undo页。In

InnoDB的Master Thread在1.0.x版本之前由主循环、后台循环、刷新循环和暂停循环组成,负责数据库的各种维护操作,如日志缓冲刷新、脏页处理和插入缓冲合并。随着版本升级,InnoDB进行了优化,例如引入了innodb_io_capacity参数和Page Cleaner Thread,以提高性能和并发性。
最低0.47元/天 解锁文章
490





