Innodb磁盘结构

news2024/10/2 5:35:56

系统表空间

系统表空间的作用

  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.coloradmin.cn/o/2183839.html

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

相关文章

解决方法:PDF文件打开之后不能打印?

打开PDF文件之后,发现文件不能打印?这是什么原因?首先我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…

React 解释常见的 hooks: useState / useRef / useContext / useReducer

前言 如果对 re-render 概念还不清楚,建议先看 React & 理解 re-render 的作用、概念,并提供详细的例子解释 再回头看本文。 如果对 React 基础语法还不熟练,建议先看 React & JSX 日常用法与基本原则 再回头看本文。 useState useS…

虚幻引擎-设置UI自适应屏幕大小

在游戏中,如果想实现不同分辨率下,都可以支持当前的UI界面布局,都需要用到锚点功能。 ‌虚幻引擎中的UI锚点(Anchor)是指控件在屏幕或父物体上的固定点,用于确定控件的位置和布局。‌ 锚点的作用是确保UI元…

【LLM】手搓一个LLM Eval

文章目录 手搓一个LLM Eval项目的动机评测流程概述支持的数据集与评测指标详细的评测过程1. 生成式任务的F1评分1.1 模型推理1.2 结果评测 2. 思考 🚀 如何运行1. 运行模型推理2. 运行评测 支持的评测指标支持自定义评测学习总结 手搓一个LLM Eval TinyEval&#x…

B. Brightness Begins Codeforces Round 976 (Div. 2)

原题 B. Brightness Begins 解析 Hint 1 第 i 个灯泡最终状态与 n 的大小无关 Hint 2 第 i 个灯泡最终状态与 i 的约数数量的奇偶性相关 Solution 对任意灯泡 i , 它的最终状态由其约数数量的奇偶性相关, 如果 i 有偶数个约数, 那么会是亮的, 否则会是暗的. 换句话说, 如…

第四届高性能计算与通信工程国际学术会议(HPCCE 2024)

目录 大会简介 主办单位,承办单位 征稿主题 会议议程 参会方式 大会官网:www.hpcce.net 大会简介 第四届高性能计算与通信工程国际学术会议(HPCCE 2024)将于2024年11月22-24日在苏州召开。HPCCE 2024将围绕“高性能计算与通信工…

回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于SABO-SVR减法平均算法优化…

CSP-J Day 1 模拟赛补题报告

姓名:王胤皓,校区:和谐校区,考试时间:2024年10月1日9:00:00~12:30:00,学号:S07738 CSP-J Day 1 模拟赛补题报告 前言 考了我们班 Rank 1 1 1。 本人在发烧状态下进行写作,勿喷。…

MySQL 问题小结

mysqld --initialize 初始化 data 文件夹 初始化的密码在这个 err 文件夹中

力扣题解 983

大家好,欢迎来到无限大的判断,祝大家国庆假期愉快 题目描述(中等) 最低票价 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出…

AI学习记录 -transformer 中对于torch和numpy常用函数的使用方式

在transformer源码中,使用了很多矩阵变换的方法,这些方法太多了,了解底层也没啥意义,也不是啥特别复杂的算法。 所以争取一句话描述这些方法,对照着看transformer的时候,可以衔接自己的思维链。 torch.un…

python访问SQL数据库

Step 1 创建一个数据库 Step 2 安装mysql-connector-python pip install mysql-connector-pythonStep 3 访问mysql,并查询表 import mysql.connectordef connect_and_query():try:# 连接到MySQL数据库connection mysql.connector.connect(hostlocalhost, # 数据库主机…

闯关训练一:Linux基础

闯关任务:完成SSH连接与端口映射并运行hello_world.py 1.创建开发机 2.SSH连接 3. VS-Code 连接 选择 Linux 平台 ,输入密码 ,选择进入文件夹 4.端口映射 按照下文安装Docs pip install gradio 运行server.py import gradio as grdef …

Python核心知识:pip使用方法大全

什么是 pip? pip 是 Python 的包管理工具,允许用户安装、升级和管理 Python 的第三方库和依赖。它极大地简化了开发过程,使开发者可以轻松地获取并安装所需的软件包。pip 已成为 Python 项目中最常见的包管理工具,并且自 Python …

【Linux】几种常见配置文件介绍

配置文件目录 linux 系统中有很多配置文件目录/etc/systemd/system、/lib/systemd/system 以及/usr/lib/systemd/system 等,这三者有什么样的关系呢? 以下是网络上找的资料汇总,并加了一些操作验证。方便后期使用 介绍 目录/lib/systemd/s…

虚拟机窗口顶部和底部出现白边(鸿蒙开发)

预览窗口顶部和底部出现白边 问题描述:预览窗口顶部和底部都有白边,导致无法全屏显示 解决方法: 官方文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-previewer-operating-6-V5 这里官方文档给了两种…

【有啥问啥】AI中的数据融合(Data Fusion):让数据“1+1>2”

AI中的数据融合(Data Fusion):让数据“11>2” 引言 在人工智能(AI)的浪潮中,数据作为驱动创新的核心要素,其重要性不言而喻。随着物联网(IoT)、传感器技术和云计算的…

基于单片机远程家电控制系统设计

本设计基于单片机的远程家电控制系统,以STC89C52单片机为核心,通过液晶LCD1602实时显示并控制,利用ESP8266WiFi模块实现本地与云平台的连接,最终实现远程对于灯光,热水器等家电的开关控制。同时,系统设有防…

pdf怎么编辑修改内容?详细介绍6款pdf编辑器功能

■ pdf怎么编辑修改内容? PDF(Portable Document Format)作为一种广泛使用的文件格式,具有特点包括兼容性强、易于传输、文件安全性高、跨平台性、可读性强、完整性、可搜索性、安全性、可压缩性。 PDF文件本身是不可以直接进行编…

认知杂谈73《成年人的修炼:勇敢前行,积极向上》

内容摘要: 成长是成年人的必修课,它要求我们不断学习、面对挑战、做出选择、调整行动。成长的必要性在于适应社会、实现自我价值。实现成长的策略包括自我掌舵、自救、为结果负责、保持积极心态。 追求艺术或商业目标、自己解决问题、承担责任、换个角度…