InnoDB master thread工作原理
我们简单交流下InnoDB master thread学习,有兴趣的朋友可以参考<<MySQL技术内蒙--InnoDB存储引擎第二版>>
void master_thread(){
    goto loop;
loop:
for (int i=;i<;i++){
    thread_sleep() //sleep 1 second-->每秒执行操作(负载在情况下会延迟)
    do log buffer flush to disk  //重做日志缓冲刷新到磁盘,即使这个事务没有提交(总是)
    if ( last_ten_second_ios < % innodb_io_capacity) //如果当前的10次数小于(5% * 200=10)(innodb_io_capacity默认值是200)
        do merger % innodb_io_capacity insert buffer //执行10个合并插入缓冲的操作(5% * 200=10)
    if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct ) //如果缓冲池中的脏页比例大于innodb_max_dirty_pages_pct(默认是75时)
        do buffer pool plush % innodb_io_capacity dirty page //刷新200个脏页到磁盘
    else if enable adaptive flush  //如果开户了自适应刷新
        do buffer pool flush desired amount dirty page //通过判断产生redo log的速度决定最合适的刷新脏页的数量
    if ( no user activity ) //如果当前没有用户活动
        goto backgroud loop  //跳到后台循环
}
//每10秒执行的操作
if ( last_ten_second_ios < innodb_io_capacity)  //如果过去10内磁盘IO次数小于设置的innodb_io_capacity的值(默认是200)
    do buffer pool flush % innodb_io_capacity dirty page //刷新脏页的数量为innodb_io_capacity的值(默认是200)
do merger % innodb_io_capacity insert buffer  //合并插入缓冲是innodb_io_capacity的5%(10)(总是)
do log buffer flush to disk                    //重做日志缓冲刷新到磁盘,即使这个事务没有提交(总是)
do full purge       //删除无用的undo页 (总是)
if (buf_get_modified_ratio_pct > %)          //如果缓冲池中的胜页比例大于70%
    do buffer pool flush % innodb_io_capacity dirty page  //刷新200个脏页到磁盘
else
    do buffer pool flush % innodb_io_capacity dirty page   //否则刷新20个脏页到磁盘
goto loop
backgroud loop:   //后台循环
do full purge     //删除无用的undo页 (总是)
do merger % innodb_io_capacity insert buffer  //合并插入缓冲是innodb_io_capacity的5%(10)(总是)
if not idle:      //如果不空闲,就跳回主循环,如果空闲就跳入flush loop
goto loop:    //跳到主循环
else:
    goto flush loop
flush loop:  //刷新循环
do buf_get_modified_ratio_pct pool flush % innodb_io_capacity dirty page //刷新200个脏页到磁盘
if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct ) //如果缓冲池中的脏页比例大于innodb_max_dirty_pages_pct的值(默认75%)
    goto flush loop            //跳到刷新循环,不断刷新脏页,直到符合条件
    goto suspend loop          //完成刷新脏页的任务后,跳入suspend loop
suspend loop:
suspend_thread()               //master线程挂起,等待事件发生
waiting event
goto loop;
}
MySQL 5.6 InnoDB 存储引擎结构图:

总结:MySQL5.6中InooDB存储引擎无论是性能和功能都比之前版本改善了不少,所以建议大家使用,相当不错的一个版本^.^
想了解更多于InnoDB相关内容,可以参考《MySQL技术内幕 InnoDB存储引擎》 作者姜 承尧的博客:http://insidemysql.sinaapp.com/article/4.html/innodb
| 
 作者:陆炫志 出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111 您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。  | 
InnoDB master thread工作原理的更多相关文章
- innodb master thread 工作原理
		
参考 innodb参数汇总 InnoDB的Master Thread工作原理 innodb_max_dirty_pages_pct 默认值 show variables like 'innodb_m ...
 - InnoDB体系架构(四)Master Thread工作方式
		
Master Thread工作方式 在前面的文章:InnoDB体系架构——后台线程 说到:InnoDB存储引擎的主要工作都是在一个单独的后台线程Master Thread中完成.这篇具体介绍该线程的具 ...
 - 14.6.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB 主线程IO 速率:
		
14.6.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB 主线程IO 速率: 主线程 在InnoDB 是一个线程 执行各种任务在后台. ...
 - 14.4.8 Configuring the InnoDB Master Thread IO Rate  配置InnoDB Master Thread I/O Rate
		
14.4.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB Master Thread I/O Rate 主的master thread ...
 - [小结]InnoDB体系结构及工作原理
		
参阅:<innodb存储引擎内幕>原创文章,会不定时更新,转发请标明出处:http://www.cnblogs.com/janehoo/p/7717041.html 一.概述: innod ...
 - InnoDB master thread学习
		
很久很久没有写博客了,工作比较忙,也没什么时间学习了,恰逢国庆放假,安心的学习一下,其实只是把之前学习过的知识再温习了一下而已.InnoDB 有众多的线程,其中非常核心的就是master thread ...
 - InnoDB Master Thread I/O Rate详解
		
一.innodb 在刷盘时要面对的问题: 1.对于innodb 的master thread 这个线程来说,它会在后台执行许多的任务,这些任务大多数都是与IO操作相关的, 比如“刷新脏页到磁盘”.“合 ...
 - Nginx源码分析:3张图看懂启动及进程工作原理
		
编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由陈科在高可用架构群分享.转载请注明来自高可用架构公众号「ArchNotes」. 导读:很多工程师及架构师都希望了解及掌握高性能服务器 ...
 - msyql master thread
		
------------------------------------------------------ 2015-02-10----------------------------------- ...
 
随机推荐
- emoji & click copy
			
emoji & click copy document.execCommand("copy"); https://clipboardjs.com/ https://www. ...
 - BZOJ2743 HEOI2012采花(离线+树状数组)
			
如果能够把所有区间内第二次出现某颜色的位置标记出来,树状数组查询一下就可以了. 考虑离线.按左端点从小到大排序,不断移动左端点并更新第二次出现的位置. #include<iostream> ...
 - Elastic-Job-Lite 源码分析 —— 运维平台
			
本文基于 Elastic-Job V2.1.5 版本分享 1. 概述 2. Maven模块 elastic-job-common-restful 3. Maven模块 elastic-job-cons ...
 - NetBeans无法使用svn相关功能
			
本来中NetBeans使用subversion功能只要下载过subversion客户端就可以直接使用了,我也一直是这样的,可是今天忽然的不能用了,发现问题是因为我在文件中使用subversion的比较 ...
 - 【树状数组套主席树】带修改区间K大数
			
P2617 Dynamic Rankings 题目描述给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+ ...
 - 【转】crc16几种标准校验算法及c语言代码
			
一.CRC16校验码的使用 现选择最常用的CRC-16校验,说明它的使用方法. 根据Modbus协议,常规485通讯的信息发送形式如下: 地址 功能码 数据信息 校验码 1byte 1byte nby ...
 - 2019.3.16 noiac的原题模拟赛
			
RT,这太谔谔了,我不承认这是模拟赛 但是虽然是搬了三道题,题目本身也还能看,就这么着吧 (怎么机房里就我一道原题都没做过啊 T1 CF24D Broken Robot 比较简单地列出式子之后,我们发 ...
 - Oracle 11g DRCP连接方式——基本原理
			
学习Oracle是一个复杂.繁琐的过程.在浩如烟海的Oracle官方资料.新特性.MOS资料和各种Internal知识面前,我们总是觉得力不从心.不知所措.但是,这往往也就是我们不断坚持.积累和追寻的 ...
 - C++委托模式
			
希望想理解C++委托的同学,能够从代码中悟出其中的原理.有什么不太清楚的地方,欢迎留言交流. #include <bits/stdc++.h> using namespace std; # ...
 - python命名空间与闭包函数详解
			
python命名空间与闭包函数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要介绍的知识点如下: 1>.三元运算 2>.命名空间 3>.globa ...