MySQL底层概述—3.InnoDB线程模型

大纲

1.InnoDB的线程模型

2.IO Thread

3.Purge Thread

4.Page Cleaner Thread

5.Master Thread

1.InnoDB的线程模型

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

后台线程的作用一:负责刷新内存池中的数据,保证缓冲池中的内存缓存是最新的数据。

后台线程的作用二:将已修改的数据页刷新到磁盘文件,保证发生异常时能恢复到正常状态。

图片

2.IO Thread

IO Thread主要用于:读取数据页 + 写入脏页 + 写入日志缓冲 + 写入写缓冲。InnoDB使用了大量的AIO(Async IO)来做读写处理,可以极大提高性能。在InnoDB之前的版本只有4个IO Thread:分别是Read、Write、Insert Buffer和Log Thread。后来版本将Read Thread和Write Thread分别增大到了4个,一共有10个。

mysql> show engine innodb status;--------FILE I/O--------I/O thread 0 state: waiting for completed aio requests (insert buffer thread)I/O thread 1 state: waiting for completed aio requests (log thread)I/O thread 2 state: waiting for completed aio requests (read thread)I/O thread 3 state: waiting for completed aio requests (read thread)I/O thread 4 state: waiting for completed aio requests (read thread)I/O thread 5 state: waiting for completed aio requests (read thread)I/O thread 6 state: waiting for completed aio requests (write thread)I/O thread 7 state: waiting for completed aio requests (write thread)I/O thread 8 state: waiting for completed aio requests (write thread)I/O thread 9 state: waiting for completed aio requests (write thread)

Read Thread负责读操作,将数据从磁盘加载到缓存,4个。Write Thread负责写操作,将缓存脏页刷新到磁盘,4个。Log Thread负责将日志缓冲区内容刷新到磁盘,1个。Insert Buffer Thread负责将写缓冲内容刷新到磁盘,1个。

3.Purge Thread

事务提交后,其使用的undo日志将不再需要了,因此需要Purge Thread回收已经分配的undo页。InnoDB支持多个Purge Thread,以便能加快回收undo页,释放内存。​​​​​​​

mysql> show variables like '%innodb_purge_threads%';
+----------------------+-------+| Variable_name        | Value |+----------------------+-------+| innodb_purge_threads | 4     |+----------------------+-------+1 row in set (0.01 sec)

4.Page Cleaner Thread

Page Cleaner Thread的作用是:刷脏页 + 清理redo log日志文件。也就是将脏数据刷新到磁盘,脏数据刷盘后相应的redo log就可以被覆盖了。既可以同步数据,又能让redo log达到循环使用的目的。

其中Page Cleaner Thread会调用Write Thread线程进行处理。​​​​​​​

mysql> show variables like '%innodb_page_cleaners%';+----------------------+-------+| Variable_name        | Value |+----------------------+-------+| innodb_page_cleaners | 1     |+----------------------+-------+

5.Master Thread

(1)Master Thread的具体工作

(2)Master Thread的定时处理

Master Thread是InnoDB的主线程,负责调度其他各线程,优先级最高。作用是:定时刷脏页 + 回收undo log + 写入redo log + 合并写缓冲。

(1)Master Thread的具体工作

一.调用Page Cleaner Thread进行脏页的刷新

二.调用Purge Thread进行undo log的回收

三.调用Log Thread进行redo log的刷新

四.调用Insert Buffer Thread进行合并写缓冲

(2)Master Thread的定时处理

Master Thread内部有两个定时处理,分别是每隔1秒和10秒的定时处理。

一.每隔1秒的操作

操作1:每秒刷新脏页数据到磁盘,但需要脏页比例达到75%才操作

innodb_io_capacity用来表示IO的吞吐量,默认200。对于刷新到磁盘页的数量,会按照innodb_io_capacity的百分比来控制。从缓冲池刷新脏页时,刷新脏页的数量为innodb_io_capcity。​​​​​​​

mysql> show variables like 'innodb_io_capacity';+--------------------+-------+| Variable_name      | Value |+--------------------+-------+| innodb_io_capacity | 200   |+--------------------+-------+1 row in set (0.00 sec)

如果缓冲池中脏页比例大于innodb_max_dirty_pages_pct(默认75%):刷新脏页到磁盘的数量是innodb_io_capacity的值。​​​​​​​

mysql> show variables like 'innodb_max_dirty_pages_pct';+----------------------------+-----------+| Variable_name              | Value     |+----------------------------+-----------+| innodb_max_dirty_pages_pct | 75.000000 |+----------------------------+-----------+

操作2:每秒合并写缓冲区的数据

其实并不是每秒都会合并写缓冲区数据的。如果前一秒的IO次数小于5,则认为IO压力小,可执行合并插入缓冲操作。

操作3:每秒刷新日志缓冲区到磁盘

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

二.每隔10秒的操作

操作1:每10秒刷新脏页数据到磁盘

从缓冲池刷新脏页时,脏页的数量为innodb_io_capcity。

操作2:每10秒合并写缓冲区

合并插入缓冲是innodb_io_capacity的5%。

操作3:每10秒刷新日志缓冲区

操作4:每10秒删除无用的undo页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

充满智慧的埃塞俄比亚狼

非洲的青山 随着地球温度上升,贝尔山顶峰的冰川消失殆尽,许多野生动物移居到海拔3000米以上的高原上生活,其中就包括埃塞俄比亚狼。埃塞俄比亚狼是埃塞俄比亚特有的动物,总数不到500只,为“濒危”物种。 埃塞俄比亚狼…

pikachu平台xss漏洞详解

声明:文章只是起演示作用,所有涉及的网站和内容,仅供大家学习交流,如有任何违法行为,均和本人无关,切勿触碰法律底线 文章目录 概述:什么是xss一、反射型XSS1. get2. post 二、存储型XSS三、DOM…

Easyexcel(7-自定义样式)

相关文章链接 Easyexcel(1-注解使用)Easyexcel(2-文件读取)Easyexcel(3-文件导出)Easyexcel(4-模板文件)Easyexcel(5-自定义列宽)Easyexcel(6-单…

FFN层,全称为Feed-Forward Network层;Layer Normalization;Softmax;

目录 FFN层,全称为Feed-Forward Network层 Layer Normalization 操作步骤 归一化和Softmax 归一化解决量纲问题 归一化(Normalization) Softmax FFN层,全称为Feed-Forward Network层 是Transformer架构中的一个关键组件。它本质上是一个简单的多层感知机(MLP),用…

Android OTA 更新面试题及参考答案

目录 什么是 OTA 更新? 什么是 OTA 更新的主要目的? Android OTA 更新是如何与系统的分区机制相互配合的? 什么是 A/B 分区更新,它的优势是什么? Android 系统中的 “System Partition” 和 “Vendor Partition” 有什么区别? 请详细阐述 Android OTA 更新的基本原…

网络研讨会——如何使用Figma、Canva或Sketch设计Delphi移动应用程序

2024年11月30日星期六 - 北京午夜12点 如何使用Figma、Canva或Sketch设计Delphi移动应用程序 专业设计应用程序Figma、Sketch和Canva有大量优秀的应用程序设计等着你去实现。我们看看有什么可用的,并使用一些最好的设计来创建应用程序。。。 立即报名免费在线研讨会…

通用网络安全设备之【防火墙】

概念: 防火墙(Firewall),也称防护墙,它是一种位于内部网络与外部网络之间的网络安全防护系统,是一种隔离技术,允许或是限制传输的数据通过。 基于 TCP/IP 协议,主要分为主机型防火…

对于GC方面,在使用Elasticsearch时要注意什么?

大家好,我是锋哥。今天分享关于【对于GC方面,在使用Elasticsearch时要注意什么?】面试题。希望对大家有帮助; 对于GC方面,在使用Elasticsearch时要注意什么? 1000道 互联网大厂Java工程师 精选面试题-Java…

[仓颉Cangjie刷题模板] 优先队列(含小顶堆实现)

[TOC]([仓颉Cangjie刷题模板] 优先队列(含小顶堆实现) ) 一、 算法&数据结构 1. 描述 堆是一个可以维护实时最大/最小值的数据结构,相比treeset等常数优很多。 常用于维护一组数据的极值贪心问题。2. 复杂度分析 初始化O(n)查询O(1)修改O(lgn) 3. 常见应用…

解决 MySQL 5.7 安装中的常见问题及解决方案

目录 前言1. 安装MySQL 5.7时的常见错误分析1.1 错误原因及表现1.2 错误的根源 2. 解决方案2.1 修改YUM仓库配置2.2 重新尝试安装2.3 处理GPG密钥错误2.4 解决依赖包问题 3. 安装成功后的配置3.1 启动MySQL服务3.2 获取临时密码3.3 修改root密码 4. 结语 前言 在Linux服务器上…

计算机网络 网络安全基础——针对实习面试

目录 网络安全基础你了解被动攻击吗?你了解主动攻击吗?你了解病毒吗?说说基本的防护措施和安全策略? 网络安全基础 网络安全威胁是指任何可能对网络系统造成损害的行为或事件。这些威胁可以是被动的,也可以是主动的。…

oracle小技巧-解决特殊密码字符而导致的exp错误

在使用oracle数据库的时候,我们经常会利用exp工具对某些表进行导出。但有些时候,因我们用户密码为安全性设有特殊字符,导致exp导出时候报:“EXP-00056和ORA-12154”,今天我们就分享下如何通过设置符号隔离的小技巧解决…

【在 PyTorch 中使用 tqdm 显示训练进度条,并解决常见错误TypeError: ‘module‘ object is not callable】

在 PyTorch 中使用 tqdm 显示训练进度条,并解决常见错误TypeError: module object is not callable 在进行深度学习模型训练时,尤其是在处理大规模数据时,实时了解训练过程中的进展是非常重要的。为了实现这一点,我们可以使用 tq…

Taro 鸿蒙技术内幕系列(三) - 多语言场景下的通用事件系统设计

基于 Taro 打造的京东鸿蒙 APP 已跟随鸿蒙 Next 系统公测,本系列文章将深入解析 Taro 如何实现使用 React 开发高性能鸿蒙应用的技术内幕 背景 在鸿蒙生态系统中,虽然原生应用通常基于 ArkTS 实现,但在实际研发过程中发现,使用 C…

【计算机网络】C/C++实现解析Wireshark离线数据包,附源码

直接先上demo 以下是一个完整的示例代码&#xff0c;演示如何使用 pcap_open_offline 函数打开一个捕获文件并读取数据包。 #include <stdio.h> #include <pcap.h>int main(int argc, char **argv) {if (argc ! 2) {fprintf(stderr, "Usage: %s <capture…

PostgreSQL外键全解析:从概念到实践的进阶指南

全文目录&#xff1a; 开篇语目录前言&#xff1a;关于外键你真的懂了吗&#xff1f;&#x1f914;外键的定义和作用 &#x1f4da;如何在PostgreSQL中创建外键 &#x1f331;基本语法示例&#xff1a;建立简单的外键关系 外键约束的各种行为和选项 &#x1f9e9;ON DELETE 与 …

带有悬浮窗功能的Android应用

android api29 gradle 8.9 要求 布局文件 (floating_window_layout.xml): 增加、删除、关闭按钮默认隐藏。使用“开始”按钮来控制这些按钮的显示和隐藏。 服务类 (FloatingWindowService.kt): 实现“开始”按钮的功能&#xff0c;点击时切换增加、删除、关闭按钮的可见性。处…

Day 27 贪心算法 part01

贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律, 没有思路就立刻看题解。 基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。 学完贪心之后再去看动态规划,就会了解贪心和动规的区别。…

PyQt5控件QWebEngineView(WebView)

PyQt5控件QWebEngineView(WebView) 下载依赖 PyQt5、PyQtWebEngine pip install --index-urlhttps://mirrors.aliyun.com/pypi/simple/ PyQt5 pip install --index-urlhttps://mirrors.aliyun.com/pypi/simple/ PyQtWebEngine加载外部网页 import sys from PyQt5.QtCore im…

ML 系列:第 36 节 — 统计学中的抽样类型

ML 系列&#xff1a;第 36 天 — 统计学中的抽样类型 文章目录 一、说明二、抽样方法三、简单随机抽样四、 Stratified Sampling分层抽样五、 Cluster Sampling 整群抽样六、Systematic Sampling系统抽样七、Convenience Sampling便利抽样八、结论 一、说明 统计学中的抽样类型…