【MySQL运行原理篇】InnoDB整体架构

InnoDB存储引擎体系架构 一、InnoDB体系结构 InnoDB 存储引擎有多个内存块,这些内存块组成了一个大的内存池,负责的工作如下: 维护所有进程/线程需要访问的多个内部数据结构。 缓存磁盘上的数据,方便快速地读取,同时在对磁盘文件的数据修改之前在这里缓存。 重做日志缓冲(redo log)。 后台线程的作用:负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下 InnoDB 能恢复到正常运行状态。 二、后台线程 InnoDB存储引擎是多线程模型, 阅读详情

InnoDB内部整体架构

在这里插入图片描述

1.体系架构

InnoDB的体系架构如下图所示:
在这里插入图片描述

从InnoDB的体系架构图可以看出,InnoDB主要由后台线程、内存池和磁盘文件三个部分组成。后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存是最近的数据,此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态。

2. 后台线程

InnoDB有不同的后台线程,用于处理不同的任务,主要有以下4类线程,分别是master thread、i/o thread、purge thread和page cleaner thread。

3. In-Memory Structures(内存池结构)

整个InnoDB内存的情况如下图所示:
在这里插入图片描述
InnoDB的内存主要由缓冲池、重做日志缓冲和额外内存池三大部分组成,下面分别进行介绍。

InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。由于CPU和磁盘间的速度差异,通常使用缓冲池技术来提高数据库的整体性能。在InnoDB存储引擎中,缓冲池中页的大小默认为16KB。

(缓存池内部实现:缓冲池的管理,重做日志缓冲,额外的内存池,Checkpoint技术,插入缓冲,两次写,自适应哈希,异步I/O,刷新邻接页,详细请看文章:InnoDB体系架构https://blog.youkuaiyun.com/MOU_IT/article/details/119084512)

4. On-Disk Structures(磁盘结构 )

Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间。共享表空间以及独立表空间都是针对数据的存储方式而言的。

4.1、System Tablespace:表空间, 会对应一个(ibdata1)文件:

在这里插入图片描述

  • 优点:可以将表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同的文件上)。数据和文件放在一起方便管理。

  • 缺点:所有的数据和索引存放到一个文件中,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日志系统这类应用最不适合用共享表空间。

4.2、File-per-table(独立表空间)

每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。首先建议使用独立表空间:
在这里插入图片描述

4.3、General TableSpaces

从5.7.6开始,增加了一种新的 tablespace模式(成为general tablespace),实际上它和共享表空间比较类似:创建一个单独的ibd,ibd中包含多个表,兼容不同的格式。general tablespace没有库的概念,因此可以在多个库里建属于同一tablespace的表。

4.4、Temporary TableSpace临时表空间,

用于存放瞬时数据,只有在session连接期间才能够看到数据,比如分组,排序时引发的临时数据存放的区域。

4.5、Redo Log

它属于Innodb引擎的功能,它主要记录数据空间数据的修改状态和内容,它的日志是循环写,日志的空间大小也是固定的,可以作为服务器异常宕机后数据数据自动恢复使用。

4.6、单表.ibd文件内容概述(核心)

InnoDb是以page为单位,将数据从磁盘中读取出来。

  • 默认情况下innodb中的page大小默认是16kb(可配置)。
SHOW VARIABLES LIKE '%page%'
SET GLOBAL innodb_page_size = 16384
#如果是配置文件配置my.cnf:
innodb_page_size = 16384
  • 操作系统中的page大小为4kb
  • 机械硬盘的扇区是512byte
  • SSD中page大小是4KB

以上所说的大小,可以理解为各个层级中,对于磁盘操作的最小单位。就好比:我们每次到电脑的磁盘中获取多少数据放入到内存中。就好比java读取文件一样:byte[] byte = new Byte[16384]。

在这里插入图片描述
也就是说:我们在读取一个文件,或者执行一个查询的时候,系统会一次性从磁盘中获取16KB内容放入到内存中。

4.7、InnoDb磁盘数据存储概念图解说明

索引和数据一起存放在文件里面,读取数据时候先读取索引表获取到对应的page,再进行精准查询
在这里插入图片描述

4.8、Innodb执行CURD的过程

  • Innodb引擎,默认执行查询的时候先找到对应表空间的表文件,
  • 然后加载到内存buffer pool 中进行存储,然后在返回,
  • 如果下次在查询如果已经存在内存中就直接返回。修改也是不会直接修改表文件,而是直接修改内存,
  • 然后通过redo log进行异步修改表空间的数据。
  • 如果缓冲池的空间不够的时候,就会采用标记算法和LRU把最近最少使用的内存并且没有修改的内存进行清除
  • 用于存放更多的后续执行CURD相关的操作的数据进行缓存。
mysql整体架构 fill:#333;color:#333;color:#333;fill:none;命中未命中客户端连接器查询缓存返回结果分析器优化器执行器存储引擎。 阅读详情

相关推荐

2、InnoDB总体架构

InnoDB 中每张表必须有一个聚簇索引。如果用户显式定义了主键,则用主键作为;否则 InnoDB 会自动选择一个合适的列或隐式创建一个 6 字节的 row_id 作为聚簇索引,这个列的内容必须满足 UNIQUE + NOT NULL。聚簇索引以B+树的形式存储在磁盘中,B+树的,每个页中包含了表中的多条数据,页中的数据以有序单链表的形式存储。当访问数据的时候,InnoDB 会以页为最小单位,将页数据从磁盘加载到 Buffer Pool。表的数据就是存储在聚簇索引的叶子节点中。

IT大白的博客 848

MYSQL中InnoDB整体架构

01、了解MYSQL的innodb的整体架构 Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间。共享表空间以及独立表空间都是针对数据的存储方式而言的。 ###01-01、In-Memory Structures(内存结构): 01-02、On-Disk Structures(磁盘结构 ): 1、System Tablespace:表空间, 会对应一个(ibdata1)文件: 优点:可以将表空间分成多个文件存放到各个磁盘上(表空间文件大小不

qq_32904533的博客 527

MySQL体系结构及原理(innodb)图文完美解析

MySQL体系结构及原理(innodb)图文完美解析

InnoDB架构体系

InnoBD的页和操作系统的页大小不一致,InnoDB页大小一般为16K,操作系统的页大小为4K,InnoDB的页写入到磁盘时,需要分4次写入。所以在InnoDB数据页进行写入磁盘的时候,留下一个数据页副本,保证可以正常使用redo log恢复数据,这就。redo log 不是每一次都写入磁盘,在buffer pool中专门留出一个区域(log buffer)用于缓存,即将要写入日志文件的数据,默认16M。开启后,每张表都会开辟一个表空间,这个文件就是数据目录下ibd文件,存放表的数据和索引。

FanGer的博客 1232

STM32H7 Flash擦除后数据读取异常的缓存问题解析

本文深入分析了STM32H7系列芯片在Flash擦除后数据读取异常的缓存问题,揭示了由于数据缓存(D-Cache)和指令缓存(I-Cache)导致的数据一致性问题。通过详细的解决方案,包括手动维护缓存一致性和操作期间禁用缓存,帮助开发者有效解决这一常见但棘手的嵌入式开发难题。

weixin_29158413的博客 392

动态数据脱敏技术分析

在当前国内信息安全热潮中,数据脱敏作为数据安全的重要一环得到了业界的认可与重视。早在2012年,数据脱敏首次作为一个单独的魔力象限由Gartner发布,Gartner在2014年又提出了:按照数据使用场景,将数据脱敏分为静态数据脱敏(Static data masking-SDM )与动态数据脱敏(Dynamic data masking-DDM )。 可能有人望文生义,认为动态数据脱敏一定比静态数据脱敏高级。非也非也,静态or动态,取决于脱敏的使用场景,主要是以使用场景为由来选择合适的数据脱敏的模式。 本

美创科技的博客 4666

MySQL的整体架构

MySQL的架构设计灵活,支持不同类型的存储引擎,这是其能够广泛适用于各种场景的一个重要原因。

常备不懈 1057

RK3588 C-PHY摄像头驱动升级踩坑记:从‘Only CSI2 supported’报错到成功取流

本文详细记录了在RK3588平台上调试C-PHY摄像头驱动的全过程,从‘Only CSI2 supported’报错分析到成功取流。内容涵盖C-PHY与CSI-2协议差异、SDK版本对比、V4L2框架下的bus-type解析机制,以及硬件排查与寄存器调优实战经验,为嵌入式Camera驱动工程师提供宝贵参考。

weixin_42522374的博客 122

【MySQL运行原理篇】底层运行结构

MySQL底层其实就相当于一个web应用结构。例如:用户前端通过点击按钮发起ajax请求到java后台,后台接收到请求后将用户操作进行业务处理后,通过orm持久层框架(将业务实体与数据表联合)连接mysql,并将封装后的sql语句发送给mysql,mysql接收到sql后进行解析,优化,缓存。接着调用存储引擎的增删改查接口,对磁盘的database进行操作。

You’re a wanderer just like me 921

SpringBoot SSE避坑指南:当客户端突然断开时服务端SseEmitter的正确回收姿势

本文深入探讨了SpringBoot中SSE连接的生命周期管理,特别是客户端主动断开连接时服务端SseEmitter的正确回收机制。文章重点分析了客户端调用eventSource.cancel()等场景下,如何利用onCompletion()回调进行可靠的资源清理,避免内存泄漏,并提供了防御式编程策略和实战优化建议。

mm9012的博客 777

从寄存器配置到G值:一份给STM32开发者的SC7A20加速度数据换算保姆级指南

本文为STM32开发者提供SC7A20三轴加速度传感器的数据换算保姆级指南,详细解析从寄存器配置到G值转换的全过程。涵盖量程选择、输出值换算原理及优化代码实现,帮助开发者快速掌握加速度数据的物理意义转换技巧,提升运动感知系统开发效率。

weixin_29172963的博客 172

mysql innodb status_查看innodb的运行状态

show innodb status 在以后的mysql版本将会被show engine innodb status所替代。总所周知show engine innodb status是用来查看当前的mysql数据库中innodb表的相关状态。1:show engine innodb status。-----------------------------------+| Type | Name...

weixin_39654322的博客 1670

ican项目四汽车零件智能测量

ican项目四汽车零件智能测量

weixin_72050316的博客 560

MYSQL整体架构以及SQL执行流程

处理数据的物理存储。:虽然在MySQL 8.0中已经移除了全局查询缓存,但在一些情况下,如使用了内存表或特定的缓存插件,仍然可能存在某种形式的缓存机制。:根据优化后的执行计划,MySQL执行器开始执行查询。:在较旧版本的MySQL中存在,用于缓存查询及其结果。:MySQL服务器接收到SQL查询后,会先对其进行语法解析,确保SQL语句符合MySQL的语法规则。例如,如果一个查询涉及多个表的连接,优化器会确定最有效的连接顺序。:查询结束后,MySQL会释放分配给该查询的资源,并且在适当的时候断开客户端连接。

congzi1984的专栏 1405

uniapp微信小程序 - 详解map地图markers图标不显示问题,自定义图标真机调试不显示变成默认marker标记点图标(解决微信小程序map组件markers自定义图标失效,兼容安卓苹果手机)

uniapp微信小程序 map地图markers图标不显示,markers图标真机调试不显示,uniapp map地图显示图标markers问题,自定义图标不显示,添加marker后不显示,uniapp 微信小程序 map marker图标不显示如何解决,uniapp小程序地图的marker图标不显示问题,微信小程序map组件markers自定义图标真机显示问题,uni-app, 微信小程序, map组件, markers图标不显示, 真机调试, 微信小程序map组件,地图加载后marker标记点ios设备

🏆 前端领域优质创作者 2911

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MySQL整体架构

InnoDB有自己的日志系统,redo log(重做日志)和undo log(撤销日志)binlog记录了所有的DML(INSERT,UPDATE,DELETE)语句。MySQL支持多种存储引擎,比如InnoDB,MyISAM,Memory等等。客户端为连接MySQL服务端的工具或者驱动,比如JDCB,ODBC等等。InnoDB是MySQL默认的存储引擎,支持事务,行级锁以及外键约束。Server层有自己的日志系统,binlog日志。生成执行计划:基于以上分析,生成SQL执行计划,2.1 Server层。

GzlAndy的博客 1126

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【mysql】SHOW INNODB STATUS 探秘

很多人让我来阐述一下 SHOW INNODB STATUS 的输出信息, 了解 SHOW INNODB STATUS 都输出了些什么信息,并且我们能从这些信息中获取什么资讯,得以提高 MySQL 性能。 首先,让我们来了解一下 SHOW INNODB STATUS 输出的基础,它打印了很多关于 InnoDB 内部性能相关的计数器、统计、事务处理信息等。在 MySQL 5 中,InnoDB 的性能统计结果也在 SHOW STATUS 结果中显示了。大部分和 SHOW INNODB STATUS 的其他信息相

lapiggy的专栏 6091

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MySQL高阶之事务原理篇以及InnoDB的MVCC原理

MySQL高阶之事务原理篇insert语句流程图(InnoDB引擎)MySQL四大特性ACID隔离级别详解读未提交-脏读(一个事务读到另一个事务没有提交的数据)读已提交-不可重复读(两次读到的结果可能是不同的)-可用的隔离级别可重复读-经常用到的隔离级别(Mysql默认隔离级别)串行化事务带来的几个问题问题1 丢失更新问题问题2 丢失更新问题问题3 数据读取异常解决方案 针对问题3InnoDB的MVCC实现undo_log(数据回滚 逆转)read view(可读视图版本链)READ COMMITTED隔离

weixin_40471676的博客 590

mysql 创建 innodb_MySQL InnoDB 创建 InnoDB 表

要创建 InnoDB 表,可以使用CREATE TABLE语句CREATE TABLE t1 (a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB;如果你的MySQL实例将 InnoDB 定义为默认存储引擎 ( 默认情况下为默认存储引擎 ),则可以无需指定ENGINE = InnoDB子句。如果你想要查询当前 MySQL 实例的默认存储...

weixin_35653597的博客 2342

[MYSQL原理篇]存储引擎InnoDB的记录结构

mysql原理篇

s13215的博客 826

MySQL的整体架构及功能详解

在前面的系列文章中,我们讲解了MySQL基础功能相关的知识,在这篇文章中,重点讲讲MySQL的整体架构,以便在后续的学习中更好的了解所讲的功能属于MySQL的哪一部分,以及前后相关的工作流程。

程序新视界 811

让mysql支持InnoDB

当你用sql语句创建表的时候,例如:create table `tb_article` (`a_id` int(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,`a_title` varchar(50) character set utf8 collate utf8_bin NOT NULL,`a_content` varchar(512) character s

chenjinyu的专栏 4348

mysql监控innodb_[MySQL 5.6] Innodb 新的监控表 INNODB_METRICS

除了Performance Schema外,在MySQL 5.6中还提供了一个新的information_schema表来监控Innodb的内部运行状态——INNODB_METRICS;该表维护了一组计数器,用户可以通过这些计数器,来监控Innodb内部运行是否健康。当前的MySQL5.6.12版本中,共有210个计数器:mysql> select count(*) from INNODB_...

weixin_28309571的博客 424

mysql show innodb_MySQL show engine innodb status 详解

首先,让我们来了解一下 SHOW INNODB STATUS 输出的基础,它打印了很多关于 InnoDB 内部性能相关的计数器、统计、事务处理信息等。在 MySQL 5 中,InnoDB 的性能统计结果也在SHOW STATUS结果中显示了。大部分和 SHOW INNODB STATUS 的其他信息相同,在旧版本中还没有这个功能。SHOW INNODB STATUS 中的很多统计值都是每秒更新...

weixin_33594662的博客 911

php mysql架构_浅谈MySQL的整体架构

前言又是新的一周,各位周一好。由于换工作,找房子这一系列事情都推在了一起,所以最近停更了一个多月。现在所有的事情都已尘埃落定,我也可以安安静静的码字啦。好了,也不多说,开始新的征程啦。最近一直在看《MySQL技术内幕——InnoDB存储引擎》这本书,也正好记录下吧。整体架构图我们先看一下MySQL的架构图,对其先有一个整体的了解。MySQL主要分为四层架构,分别是网络连接层,服务层,存储引擎层,物...

weixin_36272649的博客 518
上一篇: 【MySQL运行原理篇】底层运行结构
下一篇: 【浅谈设计模式】装饰器模式篇
_Romeo
_Romeo 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Romeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值