InnoDB体系架构——后台线程

  上一篇已经了解了MySQL数据库的体系结构 这一篇除了介绍InnoDB存储引擎的体系架构外,同时进一步了解InnoDB的后台线程。

  InnoDB存储引擎是多线程的模型,所以犹太有多个不同的后台线程,负责处理不同的任务,主要有:Master Thread、IO Thread、Purge Thread、Page Cleaner Thread四种。

  从上面图可以简单的了解InnoDb存储引擎有多个内存块。而后台线程的主要工作是负责处理(刷新)内存池中的数据,保证缓冲池中内存缓冲的是最新的数据。此外会将已修改的数据文件更新至磁盘文件,同时保证在数据库发生异常情况下,InnoDB能恢复到正常运行状态。

一、Master Thread

  Master Thread 是核心的后台线程,InnoDB存储引擎的主要工作都是由Master Thread 完成的。Master Thread的线程优先级别是最高,主要负责将缓冲池中的数据异步刷新到磁盘,包括脏页的刷新、合并插入缓冲(Insert Buffer)、回滚页(UNDO PAGE)的回收。

二、IO Thread

  在InnoDB存储引擎中大量使用AIO来处理IO请求,而IO Thread主要负责处理这些 IO 请求的回调(call back)

  默认情况下,InnoDB存储引擎的后台线程有10个:

    四个read thread

    四个write thread

    一个insert buffer thread

    一个log thread

  可以通过 show engine innodb status 命令查看

  

三、Purge Thread

  事务被提交后,,PurgeThread用来回收 undolog(可能不再需要了)。

  InnoDB1.2+开始,支持多个Purge Thread 这样做的目的为了加快回收undo页(释放内存)。

四、Page Cleaner Thread

  Page Cleaner Thread 在InnoDB1.2+新加入的,其作用是将之前版本中脏页的刷新操作都放入单独的线程中来完成,这样减轻了 Master Thread 的工作及对于用户查询线程的阻塞。

参考:《MySQL技术内幕 InnoDB存储引擎》 第2版

InnoDB体系架构(一)后台线程的更多相关文章

  1. InnoDB体系架构(四)Master Thread工作方式

    Master Thread工作方式 在前面的文章:InnoDB体系架构——后台线程 说到:InnoDB存储引擎的主要工作都是在一个单独的后台线程Master Thread中完成.这篇具体介绍该线程的具 ...

  2. InnoDB体系架构(二)内存

    InnoDB体系架构(二)内存 上篇文章 InnoDB体系架构(一)后台线程 介绍了MySQL InnoDB存储引擎后台线程:Master Thread.IO Thread.Purge Thread. ...

  3. InnoDB体系架构

    MySQL支持插件式存储引擎,常用的存储引擎则是MyISAM和InnoDB,通常在OLTP(Online Transaction Processing 在线事务处理)中,我们选择使用InnoDB,所以 ...

  4. InnoDB体系架构(三)Checkpoint技术

    Checkpoint技术 前篇 InnoDB体系架构(二)内存 从缓冲池.缓冲池的管理.重做日志缓冲.额外内存缓冲这四个点介绍了InnoDB存储引擎的内存结构,而在将缓冲池的数据刷新到磁盘的过程中使用 ...

  5. 2.3 InnoDB 体系架构

    下图简单显示了InnoDB的存储引擎的体系架构,从图可见,InnoDB储存引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构 缓存磁 ...

  6. MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构

    后台线程 1.Master Thread 2.IO Thread 3.Purge Thread 4.Page Cleaner Thread  内存 重做日志在以下三种情况下将重做日志缓存中的内容刷新到 ...

  7. InnoDB体系架构总结(二)

    事务 确保事务内的SQL都可以同步执行 要么一起成功 要么一起失败.事务有四个特性原子性 一致性,隔离性,持久性 实现方式 开始事务的时候回家记录记录一个LSN日志序列 当事务执行的时候 会首先在In ...

  8. InnoDB体系架构总结(一)

    缓冲池:    是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响.在数据库中读取的页数据会存放到缓冲池中,下次再读取相同页的时候,会首先判断该页是否在缓冲池中.对于数据库中页的修改操 ...

  9. InnoDB的后台线程(IO线程,master线程,锁监控线程,错误监控线程)和内存(缓冲池,重做日志缓冲池,额外内存池)

    InnoDB有多个内存块,你可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构. 缓存磁盘上的数据,方便快速地读取,并且在对磁盘文件的数据进行修改之前 ...

随机推荐

  1. python 优先队列

    python 优先队列 from queue import PriorityQueue q = PriorityQueue() q.put((2, 'code')) q.put((1, 'eat')) ...

  2. UNITY 打包时提示sdk tools 或 sdk build tools版本低时可以直接点update 按钮进行更新

    如题.如果不更新,而选择 : use newest version installed ,打包到结尾时可能会报错,莫名其妙的java错误 而且,SDK一旦被更新后,其所在目录的 SDK MANAGER ...

  3. nexus的安装和简介

    下载nexus Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等. 下载Nexus, 下载地址:http://www.s ...

  4. git hub 第一篇

    昨天跟着菜鸟教程进行操作,问题如下: 1.在git网站进行注册,名称和邮箱 2..忘了在开头建立本地仓库,后来又新建仓库,在仓库右键添加git bash here 3.出现了下边这个错误,参考了很多文 ...

  5. C++中如何对输出几位小数进行控制(setprecision)

  6. python 内置元祖子类

    a = (zhangsan,20,nv,123@163.com) 输出姓名 a[0] 输出年龄 a[1] 输出性别 a[2] ..... 这样写可读性非常低 使用 内置元祖子类 from collec ...

  7. SpringMVC处理XML格式的数据

    1.搭建SpringMVC+spring环境 2.web.xml,Springmvc-config.xml.springMVC提供了处理xml格式请求响应的HttpMessageConverter,s ...

  8. PC滚动条样式

    #jmwin2为外部容器             #jmwin2{   width: 90%;   height: 65%;   background: white;   position: abso ...

  9. js监控鼠标滚动事件

    //滚动动画 windowAddMouseWheel(); function windowAddMouseWheel() { var scrollFunc = function (e) { e = e ...

  10. java_22.1 Map 的应用

    定义一个九年级,年级里面有一班和二班.且有属于自己班的学生. 九年级 一班 001 张三 002  李四 二班 001 王五 002 马六 把同学都遍历出来 package demo; import ...