InnoDB存储引擎——后台线程

InnoDB体系架构 后台线程 学习了一段MySQL之后,感觉到很多东西不深入理解存储引擎无法更好的进行数据库的设计和使用,所以记录下所学的东西,方便自己和他人。 InnoDB的存储引擎的架构体系如下图所示(图片来自MySQL技术内幕): 从图中我们可以清楚的看到InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责一下的工作: 1.维护所有进程/线程需要访问的多个内部数据结... 阅读详情

1、InnoDB存储引擎概述

InnoDB存储引擎是第一个完整支持ACID事务的MySql存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用CPU和内存。

2、InnoDB体系结构

InnoDB体系架构

上图是InnoDB存储引擎的体系结构,可以看到InnoDB存储引擎有很多内存块,这些内存块组成了一个大的内存池,负责如下工作:

  • 维护所有进程/线程需要访问的多个内部数据结构;
  • 缓存磁盘上的数据,方便快速地读取,同时在对磁盘文件的数据修改之前在这里缓存。
  • 重做日志(redo log)缓冲。

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

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

  • Master Thread
    Master Thread是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲、UNDO页的回收等。
  • IO Thread
    在 InnoDB存储引擎中大量使用异步IO来处理写IO请求,这样可以极大地提高数据库的性能。
    而IO Thread的工作主要是负责这些IO请求的回调处理。目前有4个read thread和4个write thread和1个insert thread和1个log IO thread。
    通过下面的命令观察IO thread:
mysql> show engine innodb status\G

下面是部分输出:

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)
  • purge thread
    事务被提交之后,其所使用的undolog可能不在需要了,因此需要Purge Thread来回收已经使用并分配的undo页。
    在InnoDB1.1版本之前,purge操作是在Master thread中完成的。从1.1版本开始,purge操作可以独立到单独的线程中,以此来减轻master thread的工作。不过,需要在配置文件中添加如下命令才可以启用独立的Purge Thread:
[mysqld]
innodb_purge_threads=1

从版本1.2开始,InnoDB支持多个Purge Thread,这样的目的是为了进一步加快undo页的回收。
通过下面命令可以查看InnoDB开启了多少个purge thread:

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

可以看到我的没有配置purge thread为独立的线程。

  • Page Cleaner Thread
    Page Cleaner Thread是在InnoDB1.2.X版本中引入的。其作用是将之前版本中脏页的刷新操作都放入到单独的线程中来完成。
    其目的是减轻master thread的工作以及对于用户查询线程的阻塞,进一步提高InnoDB存储引擎的性能。
Mysql技术内幕InnoDB存储引擎——InnoDB存储引擎 特此申明: 前段时间找工作所以看了《Mysql技术内幕InnoDB存储引擎》,整理的时候除了参考网上已有的笔记贴,加上自己整合的,可能和别人有雷同之处。不过无所谓啦,写出来自己看看,需要的朋友参考下,仅此而已。 一.mysql体系结构和存储引擎 1.1、数据库和实例的区别          数据库:物理操作系统或其他形式文件类型的集合。在mysql下数据库文件可以是frm, 阅读详情

相关推荐

InnoDB的体系架构-后台线程与内存

文章目录一、InnoDB体系架构二、后台线程1.Master Thread :2.IO Thread :3.Purge Thread :4.Page Cleaner Thread三、内存1. 缓存池2. LRU List、Free List、Flush List 一、InnoDB体系架构 Innodb存储引擎缓存池用于缓存磁盘数据,以及缓存对磁盘文件中数据的修改,缓存redo log(innodb才有),维护所有进程、线程需要访问的内部数据结构。 后台线程的作用是刷新内存池中的数据,保证内存池中的数据是最新

weixin_44229158的博客 1250

MySQL(InnoDB剖析):05---InnoDB体系架构(后台线程、内存池、文件)

从上图可以看到,InnoDB体系结构有: ①后台线程:主要负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态 ②内存池:InnoDB有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作 维护所有进程/线程需要访问的多个内部数据结构 缓存磁盘上的数据,......

董哥的黑板报 2793

[MySQL] 浅谈InnoDB存储引擎

InnoDB是事务安全的存储引擎,设计上借鉴了很多Oracle的架构思想,一般而言,在OLTP应用中,InnoDB应该作为核心应用表的首先存储引擎。InnoDB是由第三方的Innobase Oy公司开发,现已被Oracle收购,创始人是Heikki Tuuri,芬兰赫尔辛基人,和著名的Linux创始人Linus是校友。 InnoDB体系架构 上面是InnoDB的一个简图,简单来

Zhu_Julian's Notes (朱显杰的技术博客) 6634

MySQL-innodb后台线程

在InnoDB中大量使用了AIO(Async IO)来处理写IO请求,这样可以极大提高数据库的性能。而IO Thread的工作主要负责这些IO请求的回调(call back)处理。而其目的是为了减轻原Master Thread的工作及对于用户查询线程的阻塞,进一步提高InnoDB存储引擎的性能。事务被提交后,其所使用的undo log可能不再需要,因此需要Purge Thread来回收已经使用并分配的undo页。InnoDB是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务。

睡不醒的每天 622

第73讲:深入理解MySQL数据库InnoDB存储引擎:内存结构、磁盘结构与后台线程全面解析

如下图所示:用户操作数据库表中的数据时,首先在内存结构的缓冲区里找到对应的数据,如果缓冲区中没有要处理的数据,那么会从磁盘的表空间文件里加载数据到缓冲区,当我们增删改查时,都是在缓冲区里操作的,当数据处理完毕后,经过一定的频率通过一组后台线程,将数据刷新到磁盘中的表空间里,进行数据的持久化。系统表空间是Change Buffer更改缓冲区的存储区域,更改缓冲区中的数据都在系统表空间中,如果MySQL系统中的表没有自己独立的表空间文件,或者也没有使用通用表空间,此时系统表空间就是该表的表空间。

江晓龙的博客 1万+

MYSQL系列:InnoDB存储引擎介绍(后台线程、内存池、文件)

后台进程 MySQL是多线程模型,后台有多个线程处理不同的任务. Master Thread:将缓存数据刷新到磁盘 IO Thread:负责IO请求的回调 Purge Thread:undolog在事务提交之后,就不在使用。需要Purge Thread回收undo页 Page Cleaner Thread:刷新脏页数据 内存 InnovationDB是基于磁盘存储的,其中的数据记录是按照页进行管理的。由于CPU和磁盘读写速度的巨大差异,所以需要借助内存缓冲技术,减少速度差异。因此...

NIO4444 661

【MySQL】InnoDB引擎 —— 架构 —— 后台线程

后台线程的作用就是:将InnoDB存储引擎的缓冲池中的数据在合适的时机刷新到磁盘文件中。在InnoDB的后台线程中,分为4类,分别是:Master Thread 、IO Thread、Purge Thread、 Page Cleaner Thread。

qq_39921135的博客 618

ADS仿真设计平行定向耦合器学习笔记

ADS仿真设计平行定向耦合器

qq_36521926的博客 1万+

Innodb结构

从MySQL5.5版本开始默认使用InnoDB作为引擎,它擅长处理事务,具有自动崩满恢复的特性,在日常开发中使用非常广泛,下面是言方的InnoDB引擎美构图,主要分为内存结构和磁盘结构两大部分。 内存结构主要包括Buffer Pool、Change Buffer、Adaptive Hash Index和Log Buffer四大组件。 Buffer Pool:缓冲池,简称BP。BP以Page页为单位,默认大小16K,BP的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page..

小胡子 533

Streamlit安装避坑指南:从零到一键启动你的第一个数据可视化应用

本文提供了一份详尽的Streamlit安装避坑指南,帮助用户从零开始快速启动第一个数据可视化应用。文章深入剖析了安装过程中常见的网络超时、依赖冲突、环境变量缺失等核心问题,并给出了使用虚拟环境、配置国内镜像源、利用.whl文件离线安装等多种经过验证的解决方案,确保安装过程顺畅无阻。

weixin_29065015的博客 616

网络抓包实战:如何捕获与解析802.1Q VLAN标签报文

在网络通信中,数据包是信息传输的基本单元,而VLAN(虚拟局域网)技术通过在数据链路层插入802.1Q标签,实现了网络流量的逻辑隔离与高效管理。其核心原理是在标准以太网帧头中嵌入4字节的VLAN标识,使交换机能够根据VID(VLAN ID)进行精准转发。掌握VLAN报文的捕获与解析技术,对于网络故障排查、安全审计和性能优化具有重要价值,尤其在需要验证网络隔离策略或诊断Trunk链路异常时。本文聚焦于使用Wireshark工具,结合端口镜像等实操方法,详细演示如何抓取并解读携带802.1Q标签的原始报文,帮助

weixin_33417488的博客 383

MySQL-InnoDB存储引擎(一)-后台线程、内存、缓冲池、Checkpoint

InnoDB存储引擎版本体系架构后台线程Master ThreadIO ThreadPurge(清理) ThreadPage Cleaner Thread内存缓冲池LRU List、Free List、Flush List重做日志 缓冲(名词)额外的内存池Checkpoint技术 版本 从MySQL 5.1版本时,MySQL数据库允许 存储引擎开发商 以 动态方式加载引擎 在MySQL 5.1中,可以支持两个版本的InnoDB,一个是静态编译的InnoDB版本,可将其视为老版本的InnoDB;另一个是动态加

星光之子的博客 479

量化投资进阶:Fama-French三因子模型实战解析与Python实现

本文深入解析了Fama-French三因子模型,并提供了完整的Python实战指南。文章阐述了该模型如何通过引入市值因子(SMB)和价值因子(HML),对传统CAPM模型进行重要扩展,以更精准地解释股票收益来源。详细演示了使用Python获取数据、执行回归分析并解读结果(包括关键的阿尔法α)的全过程,并探讨了该模型在量化策略构建、风格诊断和业绩归因中的核心应用。

yog99的博客 1127

MySQL InnoDB 存储引擎架构:Buffer Pool 与后台线程

基于源码深度解析,MySQL InnoDB 存储引擎架构:Buffer Pool 与后台线程

m0_57877510的博客 562

RK3588 开启多窗口

这样就支持多窗口了。

tzj1058756809的博客 268

第六节 LLaVA模型数据处理源码解读(input_ids/labels/attention_mask/image,上篇)

本篇文章直接介绍llava模型数据加工部分,整体结构说明llava多模态模型输入数据格式,其中包含input_ids/labels/attention_mask与image格式,并给出对应代码位置与整个数据加工流程。最重要,通过debug给出数据解释与代码解读,也通过一个真实数据给出模型输入格式说明。当你阅读完此篇文章,绝对透彻理解llava数据加工过程与内容。显然,一篇博客是无法呈现整个数据细节,我将继续下篇博客呈现数据细节处理。result = input.ne(3) # torch.ne函数调用。

weixin_38252409的博客 3196

InnoDB存储引擎后台线程与内存池

InnoDB完整支持ACID事务、行锁设计、支持MVCC、提供一致性非锁定读、支持外键->事务安全,适合OLTP应用(在线事务处理)。 Mytrix.,Inc.在InnoDB上存储超过1TB的数据,还有一些其他站点在InnoDB上处理平均每次800插入/更新操作->证明InnoDB是一个高性能、高可用、高可扩展性的存储引擎。 事务ACID: atomicity原子性:事务commit提交或r

linpeikun16的专栏 817

华为OD机考双机位C卷 - 信道分配(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 信道分配

算法大师! 454

MySQL:InnoDB 存储引擎(后台线程、缓冲池、重做日志缓冲、额外内存池)

asdsInnoDB 是事务安全的MySQL 存储引擎,设计上采用了类似于Oracle 数据库的架构。通常来说, InnoDB 存储引擎是OLTP应用中核心表的首选存储引擎。同时,也正是因为InnoDB 的存在,才使MySQL 数据库变得更有魅力。本章将详细介绍InnoDB 存储引擎的体系架构及其不同于其他存储引擎的特性。 asdsadasdasdasdsadasdasdasdsadassdasdsadasdasdsadasdsadassadasdas————《MySQL技术内幕INNODB存储引擎》 .

置身于量子事业的软件开发爱好者 722

使用PostgreSQL构建高可用数据库集群

在现代企业级应用中,数据库的高可用性已成为业务连续性的核心要求。PostgreSQL作为一款功能强大的开源关系型数据库,其高可用架构的设计直接影响着系统的稳定性和可靠性。

九天的专栏 1260

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

InnoDB存储引擎后台线程中的master thread

InnoDB存储引擎的主要工作都是在一个单独的后台线程master thread中完成的。 master thread主线程中主要包括以下几个循环: 主循环 loop 后台循环background loop 刷新循环flush loop 暂停循环suspend loop void master_thread() { loop: for (int i = 0; i < 10; i+

linpeikun16的专栏 750

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

InnoDB引擎底层逻辑讲解——后台线程

后台线程的作用就是将innodb存储引擎缓冲池中的数据,在合适的时机刷新到磁盘文件当中。

weixin_44860226的博客 278

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql master thread_InnoDB存储引擎后台线程中的master thread

InnoDB存储引擎的主要工作都是在一个单独的后台线程master thread中完成的。InnoDB存储引擎的主要工作都是在一个单独的后台线程master thread中完成的。master thread主线程中主要包括以下几个循环:主循环 loop后台循环background loop刷新循环flush loop暂停循环suspend loopvoid master_thread() {loo...

weixin_33427476的博客 190

innoDB 体系架构 ----后台线程

innoDB存储引擎是多线程的模型,因此有多个后台线程来完成不同任务         1.Master Thread       innoDB核心后台线程,负责将缓存池中的数据异步刷新到磁盘,保证数据一致性。     2.IO Thread       在innoDB 中大量使用了AIO(Async IO 异步非阻塞IO)来处理IO请求,这可以极大提高数据库性能。       在i

lyf22351的专栏 495

InnoDB 存储引擎

后台线程: InnoDB 存储引擎是多线程的模型,因此,其后台有多个不同的后台线程,负责处理不同的任务。 Master Thread: Master Thread 是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新,合并插入缓存(Insert Buffer),UNDO页的回收等。 IO Thread: 在InnoDB存储引擎中大量...

weixin_30633507的博客 68
上一篇: MySql体系结构和存储引擎
下一篇: InnoDB存储引擎——内存
readyao
博客等级 码龄11年 243粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值