InnoDB线程模型

news/2024/10/21 6:00:28/

新版本结构演变

  • MySQL 5.7 版本
    • 将 Undo日志表空间从共享表空间 ibdata 文件中分离出来,可以在安装 MySQL 时由用户自行指定文件大小和数量
    • 增加了 temporary 临时表空间,里面存储着临时表或临时查询结果集的数据
    • Buffer Pool 大小可以动态修改,无需重启数据库实例
  • MySQL 8.0 版本
    • 将InnoDB表的数据字典和Undo都从共享表空间ibdata中彻底分离出来了,以前需要ibdata中数据字典与独立表空间ibd文件中数据字典一致才行,8.0版本就不需要了
    • temporary 临时表空间也可以配置多个物理文件,而且均为 InnoDB 存储引擎并能创建索引,这样加快了处理的速度
    • 用户可以像 Oracle 数据库那样设置一些表空间,每个表空间对应多个物理文件,每个表空间可以给多个表使用,但一个表只能存储在一个表空间中
    • 将Doublewrite Buffer从共享表空间ibdata中也分离出来了

InnoDB线程模型

在这里插入图片描述

InnoDB存储引擎是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务

后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态

  • IO Thread

    在InnoDB中使用了大量的AIO(Async IO)来做读写处理,这样可以极大提高数据库的性能。在InnoDB1.0版本之前共有4个IO Thread,分别是write,read,insert buffer和log thread,后来版本将read thread和write thread分别增大到了4个,一共有10个了

    show engine innodb status;
    

    在这里插入图片描述

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

    事务提交之后,其使用的undo日志将不再需要,因此需要Purge Thread回收已经分配的undo页
    在这里插入图片描述
    InnoDB1.2+开始,支持多个Purge Thread 这样做的目的为了加快回收undo页(释放内存)

  • Page Cleaner Thread

    作用是将脏数据刷新到磁盘,脏数据刷盘后相应的redo log也就可以覆盖,即可以同步数据,又能达到redo log循环使用的目的。会调用write thread线程处理
    在这里插入图片描述

  • Master Thread

    Master thread是InnoDB的主线程,负责调度其他各线程,优先级最高。作用是将缓冲池中的数据异步刷新到磁盘 ,保证数据的一致性。包含:脏页的刷新(page cleaner thread)、undo页回收(purge thread)、redo日志刷新(log thread)、合并写缓冲等。内部有两个主处理,分别是每隔1秒和10秒处理

    每1秒的操作

    • 刷新脏页数据到磁盘,根据脏页比例达到75%才操作
      innodb_io_capacity用来表示IO的吞吐量,默认200,对于刷新到磁盘页的数量,会按照innodb_io_capacity的百分比来控制:

      • 在从缓冲池刷新脏页时,刷新脏页的数量为innodb_io_capcity
        在这里插入图片描述

      • 如果缓冲池中的脏页比例大于innodb_max_dirty_pages_pct(默认是75%时),刷新脏页到磁盘数量是innodb_io_capacity的值
        在这里插入图片描述

    • 合并写缓冲区数据: 并不是每秒刷新的,如果前一秒的IO次数小于5,则认为IO压力小,可以执行合并插入缓冲的操作

    • 刷新日志缓冲区到磁盘:即使事务没有提交,InnoDB也会每秒将重做日志缓冲刷新到重做日志文件中,因此可以理解为什么再大的事务提交,时间也是很短的

    每10秒的操作

    • 刷新脏页数据到磁盘
      • 从缓冲池刷新脏页时,刷行脏页的数量为innodb_io_capcity
    • 合并写缓冲区数据
      • 每隔10秒, 合并插入缓冲是innodb_io_capacity的5%
    • 刷新日志缓冲区(每隔10秒操作一次)
    • 删除无用的undo页(每隔10秒操作一次)

http://www.ppmy.cn/news/66115.html

相关文章

【最新可用】chatGPT镜像网站国内使用,免费稳定!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT 2023.5.8新增一个 ChatGPT 国内免翻版 【网站名称】:Chat GPT Ai 【使用环境】:移动端/电脑网页端 ChatGPT是一款功能强大的免费在线聊天机器人,具有人工智能…

Java分布式事务(十八)

文章目录 🔥最终一致性分布式事务解决方案_什么是最大努力通知型分布式事务🔥最大努力通知型分布式事务_最大努力通知与可靠消息最终一致性的区别🔥最大努力通知型分布式事务解决方案🔥最大努力通知型分布式事务_案例业务说明🔥最大努力通知型分布式事务实战_实现充值…

docker学习笔记(二)

目录 启动Docker ​编辑 建立 Docker 用户 ​编辑 测试 Docker 是否正常工作 卸载Docker Docker镜像加速器配置 配置镜像 检查加速器是否生效 如何在Linux中的.json文件下保存并退出 如果我是使用vi操作进来的,我该如何保存并退出呢? 如何在Li…

RUST 每日一省:解引用Deref

“解引用”(Deref) 是“取引用”(Ref) 的反操作。 取引用, 我们有&、 &mut等操作符, 对应的, 解引用, 我们有*操作符。 默认的“取引用”、 “解引用”操作是互补抵消的关系…

ChatGPT被封?了解这些原因避免账号被封!

随着企业数字化转型的加速,传统的商业模式正在被颠覆,越来越多的企业开始使用人工智能技术来推动业务发展。ChatGPT作为一种自然语言处理技术,可以通过对话方式回答用户的问题或提供信息,在企业市场营销、客户服务、销售等方面发挥…

【设计模式】责任链模式的介绍及其应用

责任链的介绍 责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求&a…

XML入门知识(一)——XML语法简介

目录 1 XML简介2 XML文档结构3 XML基本语法3.1 声明3.2 元素一 定义二 命名规则三 元素属性 3.3 实体引用3.4 注释 1 XML简介 XML 指可扩展标记语言(eXtensible Markup Language)。 XML的特点是: XML 指可扩展标记语言(EXten…

绝地求生 压枪python版

仅做学习交流,非盈利,侵联删(狗头保命) 一、概述 1.1 效果 总的来说,这种方式是通过图像识别来完成的,不侵入游戏,不读取内存,安全不被检测。 1.2 前置知识 游戏中有各种不同的枪械&#x…