美文网首页
Innodb核心原理之后台线程

Innodb核心原理之后台线程

作者: 这货不是王马勺 | 来源:发表于2024-09-09 10:28 被阅读0次

后台线程的主要作用

  • 负责刷新内存池中的数据,保证缓冲池中缓存的数据都是最近的数据(较新的热数据)
  • 将内存中已加修改的数据刷新磁盘文件

大致可以将线程分为如下四类

I/O thread

我们查看引擎状态:

show engine innodb status

在其中我们可以看到FILE I/O一个板块,其中可以看到10个I/O thread:

其中有insert buffer thread、log thread、read thread、write thread:

  • read thread:负责读取操作,将磁盘页从磁盘加载到内存的缓存页中,4个
  • write thread:负责写操作,将缓存的脏页刷新到磁盘,4个
  • log thread:负责将日志缓冲区中的内容刷新到磁盘,1个
  • insert buffer thread:负责将写缓冲区内容(change buffer的DML操作)刷新到磁盘,1个

purge thread

在事务提交之后,其使用的undo日志就不需要了,purge thread会回收已经分配的undo页。

show variables like '%innodb_purge_thread%';

默认4,支持多个purge thread以加快回收undo页速度。

page cleaner thread

作用有两部分,一个是将脏页数据刷新到磁盘,另一个是脏数据刷盘之后,相应的redo log的覆盖。
既可以同步数据,又能达到redo log循环使用的目的。

show variables like '%innodb_page_cleaner%';

默认1,一个线程。

master thread

innodb主线程,作用是负责调度其他线程,优先级最高。

  • 脏页的刷新:为了保持数据的一致性,Master Thread会定期将Buffer Pool中的脏页刷新到磁盘。脏页是指被修改过但尚未写入磁盘的数据页。Master Thread会根据脏页的比例和系统的负载情况,动态调整刷新的频率和数量。
  • undo页回收
  • redo日志刷新:Master Thread会定期将重做日志缓冲中的内容刷新到磁盘,以确保事务的持久性。这种刷新操作是顺序写,因此性能开销相对较小。
  • 合并写缓冲区:nnoDB使用插入缓冲来优化非聚集索引的插入操作。Master Thread会定期合并插入缓冲,将缓冲中的数据写入到实际的索引页中,以提高写入性能。

内部有两种操作方式,分别是每隔1秒处理,和每隔10秒处理。
每隔一秒

  • 刷新脏页数据到磁盘,当脏页比例达到75%才进行操作
show variables like '%innodb_max_dirty%';
  • 合并"写缓冲区(change buffer)"数据:并不是每秒刷新,如果前一秒I/O次数小于5,就认为I/O压力比较小,才会去执行合并写缓冲的操作
  • 刷新日志缓冲区到磁盘:即使事务没有提交,innodb也会每秒将重做日志缓冲刷新到重做日志文件中,所以我们大事务提交也不会很慢

每隔十秒

  • 刷新脏页数据到磁盘,当脏页比例达到75%才进行操作
  • 合并"写缓冲区(change buffer)"数据
  • 删除无用的undo页(每隔10秒操作1次)

相关参数

  • innodb_flush_log_at_trx_commit:控制日志刷新到磁盘的策略,可以设置为0、1或2,不同的值对应不同的刷新频率和持久性保证。
  • innodb_max_dirty_pages_pct:设置Buffer Pool中脏页的最大比例,当脏页比例超过这个值时,Master Thread会更频繁地刷新脏页到磁盘。
  • innodb_io_capacity:定义系统的IO能力,用于控制InnoDB的IO操作,可以间接影响Master Thread的IO刷新行为。

参考:

https://blog.csdn.net/qq_26664043/article/details/135821673

相关文章

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

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

  • Mysql InnoDB存储引擎初识

    InnoDB 存储引擎结构 InnoDB重要组成 后台线程 负责刷盘的Master线程 负责读出写入磁盘的IO线程...

  • 【书 : InnoDB 存储引擎】第2章 InnoDB 内核体系

    2.1 InnoDB 概述 2.2 InnoDB 版本 2.3 InnoDB 体系架构 后台线程的主要作用是负责刷...

  • InnoDB存储引擎内幕

    InnoDB存储引擎内幕 一、InnoDB存储引擎 1、体系架构 1.1. 后台线程 1.1.1. Master ...

  • InnoDB存储引擎

    innoDB的各个版本对比 innoDB的整体架构 后台线程 master thread 1.赋值将缓冲池中的数据...

  • MySQL-InnoDB后台线程

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

  • 面试题一

    1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联 2、MySQL中myisam与innodb...

  • 初识后台线程

    Ⅰ、看下所有后台线程 异步读写由下面两个参数控制 innodb_read_io_threads 不建议调整,...

  • 内容层动画(layer层 Core Animation 核心动画

    核心动画简介:核心动画直接作用于layer层;在后台线程执行,不阻塞主线程 一、CABasicAnimation ...

  • InnoDB存储引擎

    InnoDB体系架构 后台线程分类 Master Thread 主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的...

网友评论

      本文标题:Innodb核心原理之后台线程

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