当前位置: 首页 > news >正文

第9章 【MySQL】InnoDB的表空间

表空间 是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为 表名.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 ,我们后边会介绍各种不同类型的页,不同类型的页在该字段上的值是不同的。

http://www.lryc.cn/news/174412.html

相关文章:

  • 工作、生活常用免费api接口大全
  • 寻找单身狗
  • 【pytest】 allure 生成报告
  • 动态链接库搜索顺序
  • 【CAN、LIN通信的区分】
  • Redis环境配置
  • UG NX二次开发(C++)-采用std::vector对体对象的质心进行排序
  • 一点思考|关于「引领性研究」的一点感悟
  • 什么是HTTP/2?它与HTTP/1.1相比有什么改进?
  • IDEA
  • NSS [HXPCTF 2021]includer‘s revenge
  • 《动手学深度学习 Pytorch版》 7.1 深度卷积神经网络(AlexNet)
  • C++ - 双指针_盛水最多的容器
  • 分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测
  • 分享一个java+springboot+vue校园电动车租赁系统(源码、调试、开题、lw)
  • 高性能计算环境下的深度学习异构集群建设与优化实践
  • Laravel框架 - Facade门面
  • 算法通关村第16关【青铜】| 滑动窗口思想
  • CentOS安装openjdk和elasticsearch
  • 【新版】系统架构设计师 - 案例分析 - 信息安全
  • 数据库设计(火车订票系统)
  • qemu+docker在服务器上搭建linux内核调试环境
  • Stable Diffusion 参数介绍及用法
  • 打印大对象日志导致GC问题的解决
  • 【Docker】学习笔记
  • 网易云信4K 8K RTC助力远程医疗的技术实践
  • 【排序算法】冒泡排序、插入排序、归并排序、希尔排序、选择排序、堆排序、快速排序
  • Linux学习笔记-应用层篇
  • MySQL数据库的存储引擎
  • Linux-多路转接-epoll