InnoDB存储引擎(engine)主线程(master thread)工作流程分析

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

 1 void master_thread(){  
 2     goto loop;  
 3 loop:  
 4 for(int i = 0; i<10; i++){  
 5     thread_sleep(1) // sleep 1 second  
 6     do log buffer flush to disk  
 7     if ( last_one_second_ios < 5 )  
 8         do merge at most 5 insert buffer  
 9     if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct )  
10         do buffer pool flush 100 dirty page  
11     if ( no user activity )  
12         goto backgroud loop  
13 }  
14 if ( last_ten_second_ios < 200 )  
15     do buffer pool flush 100 dirty page  
16 do merge at most 5 insert buffer  
17 do log buffer flush to disk  
18 do full purge  
19 if ( buf_get_modified_ratio_pct > 70% )  
20     do buffer pool flush 100 dirty page  
21 else  
22     buffer pool flush 10 dirty page  
23 do fuzzy checkpoint  
24 goto loop  
25 background loop:  
26 do full purge  
27 do merge 20 insert buffer  
28 if not idle:  
29 goto loop:  
30 else:  
31     goto flush loop  
32 flush loop:  
33 do buffer pool flush 100 dirty page  
34 if ( buf_get_modified_ratio_pct> innodb_max_dirty_pages_pct )  
35     goto flush loop  
36 goto suspend loop  
37 suspend loop:  
38 suspend_thread()  
39 waiting event  
40 goto loop;  


解释:

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

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

full purge
全清理操作,指删除无用的Undo页。对表执行update、delete这类操作时,原先的行被标记为删除,但是因为一致性读(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的状态信息。

你可能感兴趣的:(thread,InnoDB,master,flush,page,full,purge,dirty)