InnoDB表空间

一、页面类型

1.1 页面通用部分

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

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

File Header结构:

二、独立表空间结构

2.1 区

2.1.1 区的内存分配

对于16KB的页来说,连续的64个页就是一个区 ,一个区默认占用1MB空间。

2.2.2 区的分类

空闲的区:现在还没有用到这个区中的任何页面。

有剩余空间的碎片区:表示碎片区中还有可用的页面。

没有剩余空间的碎片区:表示碎片区中的所有页面都被使用,没有空闲页面。

附属于某个段的区。每一个索引都可以分为叶子节点段和非叶子节点段,除此之外InnoDB还会另外定义一些。

特殊作用的段,在这些段中的数据量很大时将使用区来作为基本的分配单位。

2.2 段

存放叶子节点的区的集合就算是一个 段 ( segment ),存放非叶 子节点的区的集合也算是一个 段 。也就是说一个索引会生成2个段,一个叶子节点段,一个非叶子节点段。

2.2.2 表空间存储空间分配

1、在刚开始向表中插入数据的时候,段是从某个碎片区以单个页面 为单位来分配存储空间的。

2、当某个段已经占用了32个碎片区页面之后,就会以完整的区为单位来分配存储空间。

2.2.3 区的状态

2.3 XDES Entry

Segment ID (8字节)

每一个段都有一个唯一的编号,用ID表示,此处的 Segment ID 字段表示就是该区所在的段。当然前提是该 区已经被分配给某个段了,不然的话该字段的值没啥意义。

List Node (12字节)

这个部分可以将若干个 XDES Entry 结构串联成一个链表,大家看一下这个 List Node 的结构:

想定位表空间内的某一个位置的话,只需指定页号以及该位置在指定页号中的页内偏移量:

Pre Node Page Number 和 Pre Node Offset 的组合就是指向前一个 XDES Entry 的指针。

Next Node Page Number 和 Next Node Offset 的组合就是指向后一个 XDES Entry的指针。

State (4字节)

字段表明区的状态。可选的值4个,分别是: FREE 、FREE_FRAG、 FULL_FRAG和FSEG

Page State Bitmap (16字节)

这个部分共占用16个字节,也就是128个比特位。一个区默认有64个页,128个比特位被划分为64个部分,每个部分2个比特位,对应区中的一个页。这两个比特位的第一个位表示对应的页是否是空闲的,第二个比特位还没有用。

三、系统表空间

相关推荐
cookqq5 分钟前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
呼拉拉呼拉16 分钟前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超19 分钟前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)40 分钟前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅1 小时前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
超级小忍2 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税2 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql
hshpy3 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端
文牧之4 小时前
Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
运维·数据库·oracle
篱笆院的狗4 小时前
如何使用 Redis 快速实现布隆过滤器?
数据库·redis·缓存