Mysql学习笔记:Innodb数据页

138 阅读3分钟
小册:MySQL 是怎样运行的:从根儿上理解 MySQL 学习笔记整理

数据页

1.页是innodb管理存储单位的基本单位。
2.数据页结构示意图:

名称中文名占用空间大小简单描述
File Header文件头部38字节页的一些通用信息
Page Header页面头部56字节数据页专有的一些信息
Infimum + Supremum最小记录和最大记录26字节两个虚拟的行记录
User Records用户记录不确定实际存储的行记录内容
Free Space空闲空间不确定页中尚未使用的空间
Page Directory页面目录不确定页中的某些记录的相对位置
File Trailer文件尾部8字节校验页是否完整

(1)User Records:负责存储插入的记录数据,每次插入一条新数据时,就从free space分配一块内存存储数据,
当free Space空间都申请完以后,表示此页已用完,需要申请新的页。
记录头信息存储格式:以compact行格式为例,包含了变长字段长度列表,Null值列表,记录头信息,隐藏列及真实数据信息
记录头信息主要字段:

名称大小(单位:bit)描述
预留位11没有使用
预留位21没有使用
delete_mask1标记该记录是否被删除(删除后不直接移除,而是进行标记,此空间即可再次利用)
min_rec_mask1B+树的每层非叶子节点中的最小记录都会添加该标记(内节点,非叶子节点标识)
n_owned4表示当前记录拥有的记录数(此页拥有的记录条数)
heap_no13表示当前记录在记录堆的位置信息
record_type3表示当前记录的类型,0表示普通记录(真实数据),1表示B+树非叶节点记录 2表示最小记录,3表示最大记录(2和3每页面自动产生)
next_record16表示下一条记录的相对位置(存储的是本条记录真实记录到下一条数据真实记录之间的偏移量,用本记录的heap_No加上next_record就能找到下一条记录,整个页中的记录形成一条单链表,并随着数据的增删改一直调整维护,)

(2)Infimum + Supremum:存放每页生成的堆空间上最靠前的两条记录,一条最大记录,一条最小记录,数据值存的是字母Infimum和Supremum,是两条虚拟记录
(3)Page Directory:当页中的记录很多时,查找某一条记录很费时间,所以维护了一个页目录,将顺序排列的数据进行分组,每一个分组维护一个槽,槽在page directory中按序排列,并维护了此槽中最小主键ID数据,查询数据是,先用二分法将目标主键与目录中槽记录的主键比较,确定在某个槽中以后,再到此槽对应的数据分组中根据next_RECORD比对查找具体数据。
(4)Page Header:记录了槽数量,记录数量等页面信息。
(5)File Header(文件头部):记录了一些所有类型的页都通用的信息,如页号,校验和(页内容用算法计算过的短字符串),前后页号(根据前后页号,磁盘上不同位置的数据页组成了一条双向链表),页类型等。
(6)File Trailer:在页最尾部,前四个字节是校验和,用于校验加载到内存或同步到磁盘的数据页是否完整。
(7)Free Space:还未使用的页空间,等待user_Records申请 。。