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个比特位,对应区中的一个页。这两个比特位的第一个位表示对应的页是否是空闲的,第二个比特位还没有用。

三、系统表空间

相关推荐
金仓拾光集30 分钟前
筑牢风控生命线:金仓数据库替代MongoDB,重构证券融资融券业务的数据基石
数据库·mongodb·信创·1024程序员节·kingbasees·国产化替代
那我掉的头发算什么40 分钟前
【数据库】navicat的下载以及数据库约束
android·数据库·数据仓库·sql·mysql·数据库开发·数据库架构
纪伊路上盛名在1 小时前
如何批量获取蛋白质序列的所有结构域(domain)数据-2
数据库·人工智能·机器学习·统计·计算生物学·蛋白质
2301_772093562 小时前
高并发webserver_interview
运维·服务器·数据库·后端·网络协议·mysql·wireshark
大G的笔记本3 小时前
MySQL 大表查询优化、超大分页处理、SQL 慢查询优化、主键选择
数据库·sql·mysql
Lear4 小时前
Redis 持久化机制
数据库
儒道易行4 小时前
【攻防实战】Redis未授权RCE联动metasploit打穿三层内网(上)
数据库·redis·网络安全·缓存
小宁爱Python4 小时前
从零搭建 RAG 智能问答系统 6:Text2SQL 与工作流实现数据库查询
数据库·人工智能·python·django
yjsstar4 小时前
数据库MySQL基础
数据库·mysql
云边有个稻草人4 小时前
KingbaseES数据库性能调优指南:从理论到实践的全链路解析
数据库·金仓数据库