InnoDB存储引擎(engine)主线程(master thread)工作流程分析
2011-01-04 14:38
495 查看
本文基于《MySQL技术内幕 InnoDB存储引擎》中的master thread源码分析理解,作整理。
该书作者提供的master thread的伪代码:
解释:
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的状态信息。
该书作者提供的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的状态信息。
相关文章推荐
- InnoDB存储引擎之Master Thread
- MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
- 浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析
- innodb存储引擎之hash算法源码分析(未完待续)
- MySQL数据库InnoDB存储引擎源代码调试跟踪分析
- mysql 查看存储引擎的状态 show engine innodb status 详解
- innodb存储引擎之B+算法源码分析(未完待续)
- Mysql Innodb存储引擎 insert 死锁分析
- Innodb存储引擎查询输出分析(包括查询过程do_select()函数)
- innodb存储引擎之innodb_io_capacity, innodb_max_dirty_pages_pct以及innodb_adaptive_flushing参数研究与源码分析(未完待续)
- (转)MySQL数据库InnoDB存储引擎的磁盘空间利用率分析
- MySQL InnoDB存储引擎的一次死锁分析
- MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
- MySQL Study之--MySQL innodb引擎表存储分析
- mysql InnoDB的Master Thread调度流程
- mysql innodb master thread分析
- mysql存储引擎innodb和myisam的分析比较
- MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
- Innodb事务存储引擎分析
- Innodb存储引擎查询输出分析