您的位置:首页 > 其它

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

2011-01-04 14:38 495 查看
本文基于《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的状态信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息