Innodb磁盘结构

系统表空间

系统表空间的作用

  1. 存系统表中的数据
  2. 存数据字典————保存系统变量和状态变量
  3. 存变更缓冲区中未来得及落盘的数据

系统表空间文件位置

系统表可以对应磁盘上的多个表空间文件,默认情况下服务器在数据目录下创建一个名为ibdata1的文件
可以通过改变系统变量innodb_data_home_dir来自定义文件目录

配置系统表空间

系统表空间文件的大小和数量可以根据系统变量 innodb_data_file_path 决定
在这里插入图片描述
通过查看系统变量,可以发现默认情况的下系统表空间初始大小为12MB
其中autoextend代表允许系统表空间动态扩容
还有一个max关键字用于修饰系统表空间的最大空间

需要注意的是,autoextend、max只可以用于修饰最后一个表空间文件
例如innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend:max:500M
只代表ibdata2文件可以动态扩容至500M

独立表空间

独立表空间作用

独立表空间包含单个Innodb表的数据和索引,默认情况下每一个张表都对应一个表空间数据文件,便于维护,减少表与表之间的耦合关系。

独立表空间文件位置

独立表空间文件在数据目录下名为database_name目录中,以.ibd为后缀
在这里插入图片描述
当在name为chx的数据库下创建了三张表
可以看到在相应的磁盘位置生成了关于这三张表的独立表空间文件
在这里插入图片描述

独立表空间的优劣

优点:

  1. 删除独立表空间中表时,磁盘空间会返回给操作系统,提高磁盘利用率。反观系统表空间,它不会将多余的空间返还给操作系统,而是独占这一部分磁盘空间。这也是为什么非常不建议关闭独立表空间,因为这会使得磁盘利用率越来越低。
  2. 可以在其他目录上单独创建独立表空间文件,达到IO优化,文件备份的目的,提高效率和可靠性
  3. 独立表空间相比于系统表空间容量更大

缺点:

  1. 每一个表都会有未使用的空间,这些空间由于其独占性,管理不当的情况下会导致空间浪费,引起磁盘碎片
  2. 操作系统需要花费更多的成本去管理大量的独立表空间文件
  3. 扩容增量不可控制,始终以4MB为增量扩容

撤销表空间

撤销表空间就是用来管理事物所产生的撤销日志的,其具体文件对应数据目录下的undo文件,要想理清楚撤销表空间,就需要清楚什么是撤销日志

撤销日志

撤销日志(undo log)用于保证事务的原子性操作,当一个事务进行rollback操作是需要放弃已经修改的部分回到上一个版本,这就需要借助撤销日志中存储的旧版本信息进行恢复了。
撤销日志何时写入:
事务进行DML操作之前,服务器就会生成一条undolog用于保存当前版本数据,待撤销日志成功写入时才会将数据进行修改

撤销表管理日志

撤销表通过三级结构的方式对日志进行管理,从上至下依次为回滚日志、undo槽、撤销日志段

在这里插入图片描述
撤销日志段中保存多个事务的撤销日志,由undo页构成

undolog格式

一条undo日志主要记录了undo类型,表ID,上一版本,下一版本的地址,以及所对应的修改操作
在这里插入图片描述
undo type:
撤销日志类型大体分为三类:新增(insert)、删除(delete)、修改(update)
新增类型的撤销日志只需要记录主键信息
删除类型的撤销日志和修改类型的撤销日志不仅需要记录主键信息,还需要记录版本信息
undo页的组织:
像普通的数据页一样,undo页通过页头所保存的信息快速定位到某个事务的undolog
在这里插入图片描述
undo日志何时删除:
对于新增类型的undo日志,在事务提交之后可以直接删除
对于删除和修改类型的undo日志不可以直接删除,而是要将其推入history链表中,原因是因为可能有其他事务正在访问该条数据,事务所看到的数据版本可能是不一致的,只有当与该条数据的所有事务都提交后才可以进行删除。

双写缓冲区

双写缓冲区是磁盘上的⼀个存储区域,当 InnoDB 将缓冲池中的数据⻚写⼊到磁盘上表空间数据⽂件之前,先将对应的⻚写到双写缓冲区;如果在数据真正落盘的过程中出现了意外退出,⽐如操作系统、存储⼦系统崩溃或异常断电的情况, InnoDB 在崩溃恢复时可以从双写缓冲区中找到⼀份完好的⻚副本
在这里插入图片描述

重做日志

重做⽇志在保证事务的持久性和⼀致性⽅⾯起到了⾄关重要的作⽤
重做⽇志⽤于在数据库崩溃后恢复已提交事务还没有来的及落盘的数据。重做⽇志以⽂件的形式保
存在磁盘上,在正常的操作过程中,MySQL根据受影响的记录进⾏编码并写⼊重做⽇志⽂件,这些
数据称为"Redo",在重新启动时⾃动读取重做⽇志进⾏数据恢复。
redolog的作用:
对数据进⾏的DML操作都会包含在事务当中,当完成修改并且提交事务之后,在内存中被修改的数据⻚就要刷新到磁盘完成持久化;
那么如果这次DML操作对应的修改开始刷盘的话,当服务器崩溃,没有被刷到磁盘的数据⻚就从内存中丢失,这时这个事务的修改在磁盘上就是不完整的,也就是没有保证事务的⼀致性。

为了解决这个问题,InnoDB在执⾏每个DML操作时,当内存中的数据⻚修改完成之后,把修改的内容以⽇志的形式保证在磁盘上,然后再对数据⻚进⾏真正的落盘操作,这样做就相当于对修改进⾏了⼀次备份,即使当服务器崩溃也不会受到影响,当服务器重启之后,可以从磁盘上的⽇志⽂件中找到上次崩溃之前没有来的及落盘的数据继续执⾏落盘操作。

InnoDB引擎的事务采⽤了 WAL技术(Write-Ahead Logging) ,基本思想是先写⽇志,再写磁盘,只有⽇志写⼊成功,事务才算提交成功,这⾥的⽇志就是Redo Log。当发⽣宕机且数据未刷到磁盘的时候,可以通过Redo Log来恢复,保证ACID中的持久性,这也是Redo Log的作⽤。
在这里插入图片描述

通用表空间

通用表空间的作用

1、节省磁盘空间,通过共享同一个表空间,可以减少磁盘上的文件数量,使得磁盘管理更加简单。(当独立表空间中数据非常少时,可以通过通用表空间优化)
2、便于管理,当有多个表需要同时进行维护操作(如备份、恢复等)时,使用通用表空间可以使这些操作更加容易执行。
3、提高性能,某些情况下,通过将经常一起访问的表放在同一个表空间内,可能会提高并发访问时的性能,因为减少了操作系统层面的文件切换开销。

临时表空间

临时表空间的作用

临时表空间存放临时数据,一般存储在复杂查询或计算的过程中产生的中间表,例如进行笛卡尔积的时候,就会生成临时表。
这些临时表有时候可能会多次被使用到或者是极为庞大,大到内存不可以存下全部。那么这些临时数据就需要落盘保存,后续使用时可以避免重复计算。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

帝都程序猿十二时辰

前言 2019年度国产剧《长安十二时辰》火了,其口碑榜首、节奏紧凑、贴合原著、电影质感,都是这部剧的亮点。而最令人震撼的还是剧中对大唐盛世的还原,长安街坊的市容市貌、长安百姓的生活日常、长安风情的美轮美奂……而关于十二时辰的话题也接…

媒界:蓝山城市NOA再开5城,第二次OTA开启推送智能化实力全面提升

9月30日,魏牌全新蓝山的城市NOA再次取得重大进展,其智驾开城版图进一步扩张至石家庄、武汉、广州、郑州、西安五座重要城市。继保定、成都、重庆、深圳四城开通之后,全新蓝山的城市NOA智驶网络实现了又一次跨越式增长,这不仅展现了…

D21【python接口自动化学习】-python基础之内置数据类型

day21 内置数据类型文档使用 学习日期:20240928 学习目标:内置数据类型--30 内置数据类型参考:如何使用官方文档与帮助? 学习笔记: 使用官方文档 可通过终端查看数据类型的方法 使用帮助 总结 官方文档是体系化的…

<使用生成式AI对四种冒泡排序实现形式分析解释的探讨整理>

<使用生成式AI对四种冒泡排序实现形式分析解释的探讨整理> 文章目录 <使用生成式AI对四种冒泡排序实现形式分析解释的探讨整理>1.冒泡排序实现形式总结1.1关于冒泡排序实现形式1的来源&#xff1a;1.2对四种排序实现形式使用AI进行无引导分析&#xff1a;1.3AI&…

【floor报错注入】

一、sql语句基础 floor 向下取整 count 取数据的数量 group by 分组查询 Rand 随机数 limit 二、floor报错注入 主键重复报错 我们先了解group by产生的虚拟表的原理&#xff0c;了解到虚拟表的主键是不可以重复的 我们再可以通过Rand(0)函数规定固定种子后乘2&…

Win10之Ubuntu22.04(主机)与Virtual-BOX(宿主win10)网络互通调试(七十九)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

An End-to-End Local Attention Based Model for Table Recognition(ICDAR 2023)

An End-to-End Local Attention Based Model for Table Recognition(ICDAR 2023) 一.前述 作者认为基于Transformer的表格识别模型很难处理大表格的识别&#xff0c;原因是受限于它的全局注意力global attention机制。 基于以上&#xff0c;作者提出了一种局部注意力local a…

.NET Core 高性能并发编程

一、高性能大并发架构设计 .NET Core 是一个高性能、可扩展的开发框架&#xff0c;可以用于构建各种类型的应用程序&#xff0c;包括高性能大并发应用程序。为了设计和开发高性能大并发 .NET Core 应用程序&#xff0c;需要考虑以下几个方面&#xff1a; 1. 异步编程 异步编程…

在线css像素Px到百分比(%)换算器

具体请前往&#xff1a;在线Px转百分比(%)工具--将绝对像素(px)长度单位转换为相对父级元素内尺寸的相对长度单位百分比(%)

PCL 点云模型滤波(圆形)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 生成点云数据 2.1.2 模型滤波函数 2.1.3 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xf…

树和二叉树知识点大全及相关题目练习【数据结构】

树和二叉树 要注意树和二叉树是两个完全不同的结构、概念&#xff0c;它们之间不存在包含之类的关系 树的定义 树&#xff08;Tree&#xff09;是n&#xff08;n≥0&#xff09;个结点的有限集&#xff0c;它或为空树&#xff08;n 0&#xff09;&#xff1b;或为非空树&a…

lambda表达式底层实现:反编译LambdaMetafactory + 转储dump + 运行过程 + 反汇编 + 动态指令invokedynamic

一、结论先行 lambda 底层实现机制 1.lambda 表达式的本质&#xff1a;函数式接口的匿名子类的匿名对象 2.lambda表达式是语法糖 语法糖&#xff1a;编码时是lambda简洁的表达式&#xff0c;在字节码期&#xff0c;语法糖会被转换为实际复杂的实现方式&#xff0c;含义不变&am…

基于springboot的数据库原理教学案例案例库管理系统

目录 毕设制作流程功能和技术介绍系统实现截图开发核心技术介绍&#xff1a;使用说明开发步骤编译运行代码执行流程核心代码部分展示可行性分析软件测试详细视频演示源码获取 毕设制作流程 &#xff08;1&#xff09;与指导老师确定系统主要功能&#xff1b; &#xff08;2&am…

PMP--三模--解题--71-80

文章目录 7.成本管理--S曲线--S曲线对累计值进行监督和报告--S曲线可以同时报告成本与进度情况。适用于预测和敏捷项目。14.敏捷--信息发射源--是一种可见的实物展示其向组织内其他成员提供信息在不干扰团队的情况下即时实现知识共享。71、 [单选] 项目经理正在为刚刚进入第三次…

windows配置C++编译环境和VScode C++配置(保姆级教程)

1.安装MinGW-w64 MinGW-w64是一个开源的编译器套件,适用于Windows平台,支持32位和64位应用程序的开发。它包含了GCC编译器、GDB调试器以及其他必要的工具,是C++开发者在Windows环境下进行开发的重要工具。 我找到了一个下载比较快的链接:https://gitcode.com/open-source-…

FastAPI 第九课 -- 表单数据

目录 一. 前言 二. 声明表单数据模型 三. 在路由中接收表单数据 四. 表单数据的验证和文档生成 五. 处理文件上传 一. 前言 在 FastAPI 中&#xff0c;接收表单数据是一种常见的操作&#xff0c;通常用于处理用户通过 HTML 表单提交的数据。 FastAPI 提供了 Form 类型&a…

C++发邮件:如何轻松实现邮件自动化发送?

C发邮件的详细步骤与教程指南&#xff1f;如何在C中发邮件&#xff1f; 无论是定期发送报告、通知客户还是管理内部沟通&#xff0c;自动化邮件系统都能显著提升工作效率。AokSend将详细介绍如何使用C发邮件&#xff0c;实现邮件自动化发送&#xff0c;帮助您轻松管理邮件通信…

车视界系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;汽车品牌管理&#xff0c;汽车颜色管理&#xff0c;用户管理&#xff0c;汽车信息管理&#xff0c;汽车订单管理系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;汽车信息&#xff0c;我…

4.1、FineReport单元格扩展和父子格

单元格扩展 1、配置数据集 2、纵向扩展 方法一&#xff1a; 方法二&#xff1a; 结果 多个字段纵向 2、横向扩展 方法一&#xff1a; 方法二&#xff1a; 结果 父子格 没什么特殊要求&#xff0c;就保持默认 1、右边的值默认以左边为左父格 2、下边的值默认以上边…

【Windows】如何取消显示Windows聚焦在桌面上生成的“了解此图片”图标

如下图所示&#xff0c;在更换Windows聚焦显示的时候&#xff0c;会在桌面多出一个“了解此图片”的图标&#xff0c;看着很烦&#xff0c;但又因为Windows聚焦自带的壁纸比其他主题的壁纸好看很多。 下面是消除办法&#xff1a; 打开注册表&#xff08;按WindowsR&#xff0…