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----------------------------------- ...
随机推荐
- JSP 获取真实IP地址的代码
[转载]JSP 获取真实IP地址的代码 JSP 获取真实IP地址的代码 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的. ...
- BZOJ3434 WC2014时空穿梭(莫比乌斯反演)
考虑枚举相邻点距离差的比例.显然应使比例值gcd为1以保证不重复统计.确定比例之后,各维坐标的方案数就可以分开考虑.设比例之和为k,则若坐标上限为m,该维坐标取值方案数即为Σm-ki (i=1~⌊m/ ...
- Fantastic Graph 2018 沈阳赛区网络预赛 F题
题意: 二分图 有k条边,我们去选择其中的几条 每选中一条那么此条边的u 和 v的度数就+1,最后使得所有点的度数都在[l, r]这个区间内 , 这就相当于 边流入1,流出1,最后使流量平衡 解析: ...
- MySQL的group_concat()函数合并多行数据
一个很有用的函数 group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将 ...
- SQLServer过期的解决方案
看图吧,不喜欢说话,图里面我都打备注了 0SQLService异常 1找到安装中心 2升级版本 3监测ing 4输入升级key 5同意并下一步 6下一步 7下一步 8下一步 9收工 10可以打开了
- 解题:BZOJ 5093 图的价值
题面 显然只需要考虑一个点(再乘n),那么枚举这个点的度数,另外的$\frac{(n-1)(n-2)}{2}$条边是随意连的,而这个点连出去的边又和其余$n-1$个点产生组合,所以答案就是 $n*\f ...
- ssm controller层 junit单元测试
原文链接:https://www.cnblogs.com/oucbl/p/5943743.html springmvc controller junit 测试 作者:blouc@qq.com本文为作者 ...
- 汉诺塔hanoi
问题描述: 有一个梵塔,塔内有三个座A.B.C,A座上有诺干个盘子,盘子大小不等,大的在下,小的在上(如图). 把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中 ...
- 【CSS】定位层
html:定位层1.概念: >>.定位层是由html元素(标签)形成的一个特殊的box盒子. >>.其重点在于“定位”,而html元素(标签)的定位方式由CSS来控制. 通常情 ...
- springSecurity自定义认证配置
上一篇讲了springSecurity的简单入门的小demo,认证用户是在xml中写死的.今天来说一下自定义认证,读取数据库来实现认证.当然,也是非常简单的,因为仅仅是读取数据库,权限是写死的,因为相 ...