我们简单交流下InnoDB master thread学习,有兴趣的朋友可以参考<<MySQL技术内蒙--InnoDB存储引擎第二版>>

void master_thread(){goto loop;
loop:
for (int i=0;i<10;i++){thread_sleep(1) //sleep 1 second-->每秒执行操作(负载在情况下会延迟)do log buffer flush to disk  //重做日志缓冲刷新到磁盘,即使这个事务没有提交(总是)if ( last_ten_second_ios < 5% innodb_io_capacity) //如果当前的10次数小于(5% * 200=10)(innodb_io_capacity默认值是200)do merger 5% 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 100% 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 100% innodb_io_capacity dirty page //刷新脏页的数量为innodb_io_capacity的值(默认是200)
do merger 5% 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%)          //如果缓冲池中的胜页比例大于70%do buffer pool flush 100% innodb_io_capacity dirty page  //刷新200个脏页到磁盘
elsedo buffer pool flush 10% innodb_io_capacity dirty page   //否则刷新20个脏页到磁盘
goto loop
backgroud loop:   //后台循环
do full purge     //删除无用的undo页 (总是)
do merger 5% 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 100% 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

您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。

转载于:https://www.cnblogs.com/xuanzhi201111/p/4040681.html

InnoDB master thread工作原理相关推荐

  1. InnoDB Master Thread I/O Rate详解

    一.innodb 在刷盘时要面对的问题: 1.对于innodb 的master thread 这个线程来说,它会在后台执行许多的任务,这些任务大多数都是与IO操作相关的, 比如"刷新脏页到磁 ...

  2. [小结]InnoDB体系结构及工作原理

    一.概述: innodb的整个体系架构就是由多个内存块组成的缓冲池及多个后台线程构成.缓冲池缓存磁盘数据(解决cpu速度和磁盘速度的严重不匹配问题),后台进程保证缓存池和磁盘数据的一致性(读取.刷新) ...

  3. mysql中innodb的工作原理_解读MySQL的InnoDB引擎日志工作原理

    当你使用UPDATE, INSERT, DELETE语句更新数据的时候,你就改变了两个地方的数据:log buffer和data buffers.Buffers是固定长度的内存块,通常是512字节. ...

  4. Nginx源码分析:3张图看懂启动及进程工作原理

    图一:nginx 启动及内存申请过程分析 任何程序都离不开启动和配置解析.ngx 的代码离不开 ngx_cycle_s 和 ngx_pool_s 这两个核心数据结构,所以我们在启动之前先来分析下. 内 ...

  5. mysql master thread_Mysql的InnoDB引擎-3.CheckPoint手艺、Master Thread

    CheckPoint手艺 数据库每次更新数据的时刻都要将脏页刷新会磁盘,同时在事务提交中要先写重做日志,再修改页:在以上过程中发生宕机的,数据若何恢复,脏页刷新到哪里,为了解决这些问题,提出了chec ...

  6. 腾讯架构师理解的并发编程基石——Thread类的工作原理

    1. 开篇词 说到并发编程,可能大家脑海中的第一印象会是 Thread.多线程.JUC.线程池.ThreadLocal 等等内容.确实,并发编程是 Java 编程中不可或缺的一部分,掌握并发编程的核心 ...

  7. nginx启动只有master没有worker_深入探索Nginx工作原理

    Nginx 是一个轻量级的HTTP 服务程序,相比其他服务器程序如Apache,Nginx占用内存少,稳定性高,并发处理能力强.同时Nginx 还是一个反向代理服务程序,和邮件代理服务程序.Nginx ...

  8. 超详细的MySQL工作原理 体系结构

    超详细的MySQL工作原理 体系结构 妖精的杂七杂八 2020-08-13 13:54:12 了解MySQL(超详细的MySQL工作原理 体系结构) 1.MySQL体系结构 2.MySQL内存结构 3 ...

  9. 了解MySQL(超详细的MySQL工作原理 体系结构)

    了解MySQL(超详细的MySQL工作原理 体系结构) 1.MySQL体系结构 2.MySQL内存结构 3.MySQL文件结构 4.innodb体系结构 一.了解MySQL前你需要知道的 引擎是什么: ...

最新文章

  1. cdn加速的原理是怎么样的
  2. ajax 分页 评论刷新,评论:js无刷新分页(原创)
  3. 剑指offer:26-30记录
  4. init进程(即进程1,或者说linuxrc)的详解
  5. 合并数据 - 方法总结(concat、append、merge、join、combine_first)- Python代码
  6. c++/ boost 库常见错误及解决方法总结
  7. mysql关于用户的知识_关于mysql的基础知识
  8. 《TensorFlow深度学习应用实践》学习笔记1
  9. 网易云音乐ncm文件格式转mp3格式教程
  10. 学习基于springboot的java分布式中间件-Redis(3) redis之缓存穿透等典型问题
  11. 2015阿里天池大数据竞赛-Solution
  12. unity3d 动态添加地面贴图 草地
  13. W806-ADC-PWM-TIM尝鲜
  14. 程序员高手和菜鸟的区别是什么?
  15. 2018.07.18【2018提高组】模拟C组
  16. 上海往事之2015-07股市风云录
  17. Wargames学习笔记--Bandit
  18. 投资笔记3-建立资产认知
  19. 0x00405cad指令引用的“0x00000000”内存。该内存不能为“read”
  20. Unity中文输入法不能输入问题解决

热门文章

  1. asp与php对比,个人看法 zblogasp和zblogphp的对比
  2. 数据库主键从某个值开始自增
  3. Android微信怎么变成黑色,科技知识:安卓微信怎么变成黑色主题 安卓微信变成黑色主题方法...
  4. gc日志一般关注什么_JVM(23)JVM的Full GC日志
  5. c语言脸型图案,[转载]各种脸型的分析及修饰
  6. telnet 无法连接_Telnet 为什么不能以 root 身份登录系统?
  7. arch linux rpm格式,如何在ArchLinux上安装RPM包
  8. js php 中文乱码怎么解决_php中文乱码怎么解决
  9. matlab d=sqrt((i-m)^2+(j-n)^2);,硕士研究生《数字图像处理》作业
  10. Git 查看帮助命令