本文基于MySQL技术内幕 InnoDB存储引擎》中的master thread源码分析理解,作整理。
该书作者提供的master thread的伪代码:






































解释:

log buffer flush to disk
把重做日志缓存(redo log)刷新到日志文件(log file)

merge insert buffer
合并插入缓存,这是InnoDB引擎特有的,指对于非聚集索引的插入或更新,不是每一次直接直接插入到索引页中,而是先判断插入的非聚集索引是否在缓冲池中。如果在,直接插入;如果不在,则先放主一个插入缓存区中,然后再以一定的频率插插入缓冲和非聚集索引页子节点的合并操作。通常是多个插入合并到一个操作中。

full purge
全清理操作,指删除无用的Undo页。对表执行updatedelete这类操作时,原先的行被标记为删除,但是因为一致性读(consistent read)的关系,需要保留这些行版本的信息。但是在full purge过程中,InnoDB存储引擎会判断当前事务系统中已被删除的行是否可以删除,比如有时候可能还有查询操作需要读取之前版本的Undo信息,如果可以,InnoDB会立即将其删除。注意full purge只会清除不再使用的Undo页。

buffer pool flush dirty page
对比磁盘上的数据块,指把缓冲池中修改过的数据页(修改过的data page,即脏页dirty page)刷新到硬盘上。

fuzzy checkpoint
产生模糊检查点,检查点有点类似于windows操作系统中的系统还原点,会把最老日志序列号(LSN)的页写到硬盘上。

innodb_max_dirty_pages_pct 
InnoDB存储引擎中的一个动态变量,指缓冲池中脏页的比例。理论上更小的值,更大的IO。

从InnoDB Plugin开始可以通过show engine innodb status来查看当前master thread的状态信息。