美文网首页
MySQL-InnoDB后台线程

MySQL-InnoDB后台线程

作者: agile4j | 来源:发表于2018-10-26 22:01 被阅读11次

作者:刘仁鹏
参考资料:《MySQL技术内幕:InnoDB存储引擎》


1.四种后台线程

1.Master Thread

  • 负责 将缓冲池中的数据异步刷新到磁盘 ,保证数据的一致性。
    包括合并插入缓冲重做日志缓冲写入磁盘、脏页的刷新(在PageCleanerThread中做)、UNDO页的回收(在PurgeThread中做)等。
  • Master Thread内部由多个循环组成:主循环(loop)、后台循环(background loop)、刷新循环(flush loop)、暂停循环(suspend loop)
  • Master Thread会根据数据库运行的状态在上述循环中进行切换
  • 下文中合并插入缓冲和脏页刷新操作中“一定数量”的计算依据来自于innodb_io_capacity参数,该参数由用户设定,表示磁盘IO吞吐量

1.主循环

  • 主循环中包含两大部分操作:innodb is not idle时的操作(老版本每秒的操作)和innodb is idle时的操作(老版本每10秒的操作)

1.innodb is not idle时的操作

  1. 重做日志缓冲写入磁盘,即使该事务未提交(总是)
  • 这就是为什么再大的事务,提交时间也很短的原因
  1. 合并插入缓冲(可能)
  • InnoDB会根据当前IO次数判断IO压力大小,若IO压力小,才会合并插入缓冲
  1. 将一定数量的脏页刷回磁盘(可能)
  • 根据产生重做日志的速度,和innodb_max_dirty_pages_pct参数所设阈值,决定是否进行该操作,以及操作的脏页数量
  1. 若没有用户活动,切到后台循环(可能)

2.innodb is idle时的操作

  1. 将重做日志缓冲写入磁盘(总是)
  2. 合并一定数量的插入缓冲(总是)
  3. 将一定数量的脏页刷回磁盘(总是)
  4. 删除一定数量无用Undo页(总是)
  • 删除数量受innodb_purge_batch_size参数值影响

2.后台循环

  1. 删除无用Undo页(总是)
  2. 合并一定数量插入缓冲(总是)
  3. 若有用户活动,跳回主循环,否则,跳入刷新循环(总是)

3.刷新循环

  1. 将一定数量的脏页刷回磁盘(总是)
  2. 跳入暂停循环(总是)

4.暂停循环

  1. 将Master Thread挂起
  2. 若有事件发生,跳入主循环(总是)

2.IO Thread

  • InnoDB使用了大量 AIO 来处理IO请求以提高性能,IO Thread的主要工作是 处理这些IO请求的回调
  1. write thread
  2. read thread
  3. insert buffer thread
  4. log thread

3.Purge Thread

  • 事务被提交后,其所使用的 undolog 可能不再需要,因此需要PurgeThread来 回收已经使用并分配的undo页

4.Page Cleaner Thread

  • 脏页的刷新。

相关文章

  • MySQL-InnoDB后台线程

    作者:刘仁鹏参考资料:《MySQL技术内幕:InnoDB存储引擎》 1.四种后台线程 1.Master Threa...

  • java线程使用总结

    ### 线程知识点归纳,后续更新 1. 后台线程:设置Thread.setDaemon(true)就是后台线程了。...

  • 守护线程和用户线程

    后台/守护/daemon 程序运行的时候,在后台提供的一种通用服务的线程。当所有的用户线程结束后,后台线程也被全部...

  • java控制线程(二)

    java控制线程(二) 后台线程: what: 有一种线程,它是在后台运行的,它的任务是为其他的线程提供服务,这种...

  • 读书笔记 多线程 -- GCD

    线程主要分为 主线程和后台线程两种,一个应用只有一个主线程,其他都是后台线程。主线程主要是负责UI界面更新和响应用...

  • 守护线程(后台线程)

    与前台线程的区别: 开启、运行都没有区别,只有结束有区别:要前台线程结束后,后台线程才会结束,而且是自动结束的。

  • Java多线程 -- 03 控制线程

    目录导读 join线程:join 后台线程(Daemon Thread) 线程睡眠:sleep 线程让步:yiel...

  • 创建线程的几种方法

    直接创建 创建线程后自动启动 创建后台线程

  • MySQL技术内幕--读书笔记

    基础: B树和B+树 参考这里 : innodb后台线程 master thread 核心后台线程,负责将数据异步...

  • NSThread

    开启子线程方式 创建线程 分离出子线程 开启后台线程 线程属性 线程名字 线程优先级0.0~1.0 默认0.5优先...

网友评论

      本文标题:MySQL-InnoDB后台线程

      本文链接:https://www.haomeiwen.com/subject/icxrtqtx.html