第9章 【MySQL】InnoDB的表空间

2023-09-21 14:41:33

表空间 是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为 表名.ibd 的实际文件。大家可以把表空间想象成被切分为许许多多个 页 的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。

9.1 温习

9.1.1 页面类型

InnoDB是以页为单位管理存储空间的,我们的聚簇索引(也就是完整的表数据)和其他的二级索引都是以 B+ 树的形式保存到表空间的,而 B+ 树的节点就是数据页。我们前边说过,这个数据页的类型名其实是: FIL_PAGE_INDEX ,除了这种存放索引数据的页面类型之外,InnoDB也为了不同的目的设计了若干种不同类型的页面,为了唤醒大家的记忆,我们再一次把各种常用的页面类型提出来:

类型名称

十六进制

描述

FIL_PAGE_TYPE_ALLOCATED

0x0000

最新分配,还没使用

FIL_PAGE_UNDO_LOG

0x0002

Undo日志页

FIL_PAGE_INODE

0x0003

段信息节点

FIL_PAGE_IBUF_FREE_LIST

0x0004

Insert Buffer空闲列表

FIL_PAGE_IBUF_BITMAP

0x0005

Insert Buffer位图

FIL_PAGE_TYPE_SYS

0x0006

系统页

FIL_PAGE_TYPE_TRX_SYS

0x0007

事务系统数据

FIL_PAGE_TYPE_FSP_HDR

0x0008

表空间头部信息

FIL_PAGE_TYPE_XDES

0x0009

扩展描述页

FIL_PAGE_TYPE_BLOB

0x000A

BLOB页

FIL_PAGE_INDEX

0x45BF

索引页,也就是数据页

页面类型前边都有个 FIL_PAGE 或者 FIL_PAGE_TYPE 的前缀,为简便起见我们后边唠叨页面类型的时候就把这些前缀省略掉了,比方说 FIL_PAGE_TYPE_ALLOCATED 类型称为 ALLOCATED 类型, FIL_PAGE_INDEX 类型称为INDEX 类型。

9.1.2 页面通用部分

数据页,也就是 INDEX 类型的页由7个部分组成,其中的两个部分是所有类型的页面都通用的。当然我不能寄希望于你把我说的话都记住,所以在这里重新强调一遍,任何类型的页面都有下边这种通用的结构:

从上图中可以看出,任何类型的页都会包含这两个部分:

File Header :记录页面的一些通用信息

File Trailer :校验页是否完整,保证从内存到磁盘刷新时内容的一致性。

对于 File Trailer 我们不再做过多强调,全部忘记了的话可以到将数据页的那一章回顾一下。我们这里再强调一遍 File Header 的各个组成部分:

名称

占用空间大小

描述

FIL_PAGE_SPACE_OR_CHKSUM

4 字节

页的校验和(checksum值)

FIL_PAGE_OFFSET

4 字节

页号

FIL_PAGE_PREV

4 字节

上一个页的页号

FIL_PAGE_NEXT

4 字节

下一个页的页号

FIL_PAGE_LSN

8 字节

页面被最后修改时对应的日志序列位置(英文名是:Log SequenceNumber)

FIL_PAGE_TYPE

2 字节

该页的类型

FIL_PAGE_FILE_FLUSH_LSN

8 字节

仅在系统表空间的一个页中定义,代表文件至少被刷新到了对应的LSN值

FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID

4 字节

页属于哪个表空间

表空间中的每一个页都对应着一个页号,也就是 FIL_PAGE_OFFSET ,这个页号由4个字节组成,也就是32个比特位,所以一个表空间最多可以拥有2³²个页,如果按照页的默认大小16KB来算,一个表空间最多支持64TB的数据。表空间的第一个页的页号为0,之后的页号分别是1,2,3...依此类推

某些类型的页可以组成链表,链表中的页可以不按照物理顺序存储,而是根据 FIL_PAGE_PREV 和FIL_PAGE_NEXT 来存储上一个页和下一个页的页号。需要注意的是,这两个字段主要是为了 INDEX 类型的页,也就是我们之前一直说的数据页建立 B+ 树后,为每层节点建立双向链表用的,一般类型的页是不使用这两个字段的。

每个页的类型由 FIL_PAGE_TYPE 表示,比如像数据页的该字段的值就是 0x45BF ,我们后边会介绍各种不同类型的页,不同类型的页在该字段上的值是不同的。

更多推荐

最新AI系统ChatGPT源码+支持OpenAI全模型+国内AI模型+AI绘画

一、SparkAI智能创作系统SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!SparkAi程序使用Ne

【AI语言大模型】星火使用介绍

一、前言现在AI语言大模型是百花齐放,挺好!有竞争,有发展,才能推出更好的产品。现在,科大讯飞就推出了大语言模型——星火!能够学习和理解人类的语言,进行多轮对话,回答问题,高效便捷地帮助人们获取信息、知识和灵感。星火在对话栏设置了三个插件:文档回答、PPT生成、简历生成,下面详细介绍三个插件的用法。二、插件介绍如下图所

9 种方法使用 Amazon CodeWhisperer 快速构建应用

AmazonCodeWhisperer是一款很赞的生成式人工智能编程工具。自从在工作中使用了CodeWhisperer,我发现不仅代码编译的效率有所提高,应用开发的工作也变得快乐起来。然而,任何生成式AI工具的有效学习都需要初学者要有接受新工作方式的心态和意愿。AmazonCodeWhispererAICodeGene

一篇关于vue的入门的详细介绍

目录一.介绍二.库和框架的区别三.什么是MVVM模式四.实例4.1.Vue开发示例4.2.双向数据绑定4.3.生命周期好啦,今天的分享就到这了,希望能够帮到你呢!😊😊一.介绍Vue.js是一种流行的JavaScript框架,用于构建用户界面。它被设计为一个渐进式框架,可以逐步应用到现有项目中,也可以作为一个完整的单

【JVM】Java类的加载机制!

一、类的生命周期类加载过程包含:加载、验证、准备、解析和初始化,一共包括5个阶段。(1)加载:简单来说就是将java类的字节码文件加载到机器内存中。在加载类时,Java虚拟机必须完成以下3件事情:通过类的完全限定名称获取定义该类的二进制字节流。将该字节流表示的静态存储结构转换为Metaspace元空间区的运行时存储结构

科锐逆向第二阶段(一)SDK

基本概念什么是SDKSDK是软件开发工具包(SoftwareDevelopmentKit)的缩写。它是一个集成了软件开发所需工具、库文件、示例代码和文档等资源的软件包。SDK通常由软件开发公司或平台提供,旨在帮助开发人员构建、测试和部署特定类型的应用程序、库或服务。它提供了一套开发工具,使开发人员能够利用平台或框架的功

idea把项目打成jar包步骤详解

最近产品需要预研一个小功能,开始后在本地开发测试好之后,需要打成jar提供出去,今天弄完了,决定把这个步骤记录下来,便于以后轻车熟路。打成jar要有mian方法的入口,所以我们在代码中需要定义一个main方法,然后通过这个main方法调用我们的核心逻辑代码。下面是我的代码示例:publicstaticvoidmain(

基于微信小程序的图书管理系统设计与实现(源码+lw+部署文档+讲解等)

前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗👇🏻精彩专栏推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选

使用 OpenWRT 设置 Banana Pi BPI-R3开源硬件路由器

这里介绍如何使用pfSense将ZimaBoard216设置为防火墙的链接。我们正在为小型板计算机建立一个专用网络,这样当我开始教授Linux时,我就可以显示和共享它的IP。现在为我的网络设置一条到pfSense后面的路由。这是为了提供另一个级别的安全性。我有两台Banana-Pi路由器1)Banana-PiR2Pro

【案例教学】华为云API图引擎服务 GES的便捷性—AI帮助快速处理图片小助手

云服务、API、SDK,调试,查看,我都行阅读短文您可以学习到:人工智能AI快速处理图片1IntelliJIDEA之API插件介绍API插件支持VSCodeIDE、IntelliJIDEA等平台、以及华为云自研CodeArtsIDE,基于华为云服务提供的能力,帮助开发者更高效、便捷的搭建应用。API插件关联华为云服务下

虹科教您 | 可实现带宽计量和延迟计算的时间敏感网络测试工具RELY-TSN-LAB操作指南与基本功能测试

1.RELY-TSN-LAB产品概述时间敏感网络(TSN)能够合并OT和IT世界,这将是真正确保互操作性和标准化的创新性技术。这项技术的有效开发将显著降低设备成本、维护、先进分析服务的无缝集成以及减少对单个供应商的依赖。为了在这些网络中实现确定性,需要控制连接到网络的设备的延迟和带宽,并预测其在拥堵和错误情况下的行为。

热文推荐