【MySQL 数据宝典】【线程模型】-IO Thread、Puge Thread介绍

一、 线程模型

42.jpg
多线程模型

  • InnoDB存储引擎采用多线程模型,其后台运行多个不同的后台线程,每个线程负责处理特定的任务。

后台线程功能

  1. 刷新内存池数据: 后台线程负责定期刷新内存池中的数据,以确保缓冲池中的内存缓存保持最新的数据。
  2. 数据文件刷新: 将已修改的数据文件刷新到磁盘文件,确保数据持久化,防止数据丢失。
  3. 异常恢复: 在数据库发生异常的情况下,后台线程负责恢复数据库到正常运行状态,保障数据库的稳定性和可靠性。

后台线程种类

  1. 刷新线程(flush thread): 负责将缓冲池中的脏页刷新到磁盘上的数据文件。
  2. 检查点线程(checkpoint thread): 定期触发检查点操作,将缓冲池中的数据页刷新到数据文件,并记录最后一个检查点的LSN(日志序列号)。
  3. 日志写入线程(log write thread): 将日志缓冲池中的日志写入磁盘上的日志文件,保证事务的持久性。
  4. 后台IO线程(background IO thread): 负责处理后台IO操作,如读取和写入数据文件等。

1.1 IO Thread

在InnoDB中,大量采用了异步IO(AIO)技术来进行读写处理,这一特性可以显著提高数据库的性能。通过异步IO,InnoDB能够在进行IO操作时不阻塞其他线程的执行,从而更高效地处理读写请求。
IO线程配置

在InnoDB 1.0版本之前,共有4个IO Thread,分别是:

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

而在后续版本中,read thread和write thread分别增大到了4个,总共有10个IO线程。

要查看InnoDB的IO线程状态,可以使用MySQL的命令show engine innodb status;,该命令将显示当前InnoDB引擎的详细状态信息,包括IO线程的数量和状态等。

FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: waiting for i/o request (write thread)
I/O thread 7 state: waiting for i/o request (write thread)
I/O thread 8 state: waiting for i/o request (write thread)
I/O thread 9 state: waiting for i/o request (write thread)
Pending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0] ,
 ibuf aio reads:, log i/o's:, sync i/o's:
Pending flushes (fsync) log: 0; buffer pool: 0
681521 OS file reads, 1808551 OS file writes, 1586763 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.12 writes/s, 0.12 fsyncs/s

1.2 purge Thread

Thread事务提交之后,其使用的undo日志将不再需要,因此需要Purge Thread回收已经分配的undo页。

mysql> show variables like '%innodb_purge_threads%';

+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_purge_threads | 4     |
+----------------------+-------+
1 row in set (0.01 sec)

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

1.3 Page Clean Thread

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

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

1.4 Master Thread

主要功能

InnoDB的Master Thread是主线程,担负着调度其他各个线程的重要任务,其优先级最高。主要功能包括:

  • 异步刷新缓冲池中的数据到磁盘,以保证数据的一致性。
  • 调度各个线程执行特定的任务,包括脏页的刷新、undo页的回收、redo日志的刷新、合并写缓冲等。

操作频率及具体操作

每1秒的操作:
  1. 刷新脏页数据到磁盘:
    • 根据脏页比例达到75%才执行刷新操作。
    • 刷新脏页的数量受到innodb_io_capacity参数的控制,该参数默认值为200。

示例输出:

mysql> show variables like 'innodb_io_capacity';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| innodb_io_capacity | 200   |
+--------------------+-------+

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FebHost:科技企业如何规划并注册.AI域名?

为确保企业使用.AI域名的方式准确反映其对人工智能技术的关注,企业应考虑以下步骤: 了解法律和合规要求: 第一步是了解与 .AI 域名相关的独特法律和合规要求。由于.AI域名源于安圭拉,企业必须遵守安圭拉的限制和法律规定。这包括…

搭建MySQL主从结构时的问题

说明:记录搭建MySQL主从结构时遇到的两个问题; 问题一:连接主节点失败 搭建完成后从节点查看状态如下: 错误:error connecting to master admin主机IP - retry-time: 60 retries: 712 message: Host 主机IP is block…

通配符/泛域名SSL证书可以保护多少个域名

通配符/泛域名SSL证书,他可以保护一个主域名和无限个子域名。我们需要了解什么是通配符/泛域名SSL证书。这种证书是一种特殊的数字证书,它允许一个单一的SSL证书被安装在多个服务器上。这是通过使用通配符(*)来实现的,…

关于开设RT-DETR专栏及更新内容的一些说明

​ 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 专栏介绍 YOLOv9作为最新的YOLO系列模型,对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

项目优化11

QT多线程 发送数据不在主线程里面发送了,用信号槽机制,让数据移动到另一个线程里面去发送 多线程发送视频帧:kernel类里: .cpp

【面试经典 150 | 数组】整数转罗马数字

文章目录 写在前面Tag题目来源解题思路方法一:模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

人工智能论文GPT-3(5):2020.5 Language Models are Few-Shot Learners;总结

6 更广泛的影响 语言模型对社会具有广泛的有益应用,包括代码和写作自动完成、语法辅助、游戏叙事生成、提高搜索引擎响应速度和回答问题等。但它们也可能具有潜在的有害应用。GPT-3 提高了文本生成质量和适应性,使得相较于较小的模型更难将合成文本与人…

AI自动生成PPT文档 aippt的API介绍文档

官方链接直达! 产品介绍​ 能力介绍​ AiPPT 是一款智能生成演示幻灯片的在线工具。专业设计团队打造海量模板资源,输入标题即可轻松生成完整的PPT。同时 AiPPT 支持导入多格式文档一键生成 PPT,让 PPT 创作更加高效。聚焦于内容&#xff0…

夜鸦国际服账号验证怎么办 夜鸦国际服账号认证的详细教程

夜鸦国际服账号验证怎么办 夜鸦国际服账号认证的详细教程 今天为大家带来的是《夜鸦》这款游戏,游戏背景是基于13世纪欧洲背景的MMORPG游戏,这款游戏以其沉浸式的游戏体验和流畅的打斗为特色。玩家可以选择战士、剑士、猎人或女巫等角色,体验…

Tensorflow AutoGraph 的作用和功能

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ TensorFlow AutoGraph 是 TensorFlow 中的一个重要特性,它允许开发者使用普通的 Python 语法编写高效的 TensorFlow 图(graph)。这意味着开发者可以利用 Python 的易…

(六)小案例银行家应用程序-删除账号-findindex方法

findindex方法和find方法非常类似,只不过findindex顾名思义,他返回的是index; ● 下面我们使用删除账号的功能来学习一下findindex的 ● 当用户登录成功之后,可以在下方输入自己的用户名和密码,然后提交&#xff0c…

在线音乐播放网站项目测试(selenium+Junit5)

在做完在线音乐播放网站项目之后,需要对项目的功能、接口进行测试,利用测试的工具:selenium以及Java的单元测试工具Junit进行测试,下面式测试的思维导图,列出该项目需要测试的所有测试用例: 测试结果&#…

flink Unsupported operand types: IF(boolean, NULL, String)

问题:业务方存储了NULL 字符串,需要处理为 null select if(anull,null,a); 结果遇到了 Unsupported operand types: IF(boolean, NULL, String),根据报错反馈,很明显应该是没有对 null 自动转换&#xff…

视频教程下载:ChatGPT驱动的SEO、网络营销、生产力提升

用户遇到的一个常见问题是在ChatGPT对话过程中难以保持清晰的目的和专注。这可能导致互动无效和浪费时间。这门课程将教给各种创意人士——艺术家、制造者、博主、讲师和内容创作者——如何制定理想的提示配方,从而产生更有成效的对话和更高的回报。 这是一门关于如…

防腐木负氧离子监测站

TH-FZ4随着生活品质的提升,人们对空气质量的要求也日益提高。在这个背景下,防腐木负氧离子监测站作为空气质量监测的重要设备,逐渐进入了人们的视野。本文将为您详细解读防腐木负氧离子监测站的工作原理,带您了解这一环保科技的魅…

SQLite FTS5 扩展(三十)

返回:SQLite—系列文章目录 上一篇:SQLite的知名用户(二十九) 下一篇:SQLite 的命令行 Shell(三十一) 1. FTS5概述 FTS5 是一个 SQLite 虚拟表模块,它为数据库应用程序提供全文搜索功能。在最基本的形式中, 全文搜索引擎允许…

Jmeter(十二) - 从入门到精通 - JMeter逻辑控制器 - 终篇(详解教程)

宏哥微信粉丝群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”。 意思是说,逻辑控制器可以控制采样…

用阿里巴巴的通义听悟,免费、快速批量制作视频字幕

阿里巴巴的通义听悟可以快速准确的将音频转为文字,那么自然也可以为视频添加字幕。 具体操作方式如下: 首先,在通义听悟中点击:新建,新建一个文件夹,然后把要添加字幕的视频都上传到这里。 如果视频存在…

LeetCode131:分割回文串

题目描述 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串。 返回 s 所有可能的分割方案。 代码 class Solution { public:vector<vector<string>> res;vector<string> path;bool isPalindrome(const string &…

分支语句和循环语句笔记

分支语句和循环语句 分支语句:if switch 循环语句 : while for do while goto语句 1. 什么是语句&#xff1f; C语句可分为以下五类&#xff1a;1.表达式语句2. 函数调用语句 3.控制语句 4.复合语句 5.空语句 控制语句用于控制程序的执行流程&#xff0c;以实现程序的各种…