mysql-innodb-页结构-索引页
innodb数据页的空间被分成了7部分
记录头:
delete_mask表示当前记录是否被删除,被删掉的记录不会立马清除,next_record会把被删掉的记录组成一个垃圾链表,以备重用这部分数据
min_rec_mask b+树每层非叶子节点的最小记录都会添加该标记
n_owned 记录分组中有多少条记录
heap_no 表示当前记录在本页中的位置 mysql默认会添加两条伪记录,一个代表最大记录一个代表最小记录
record_type 0普通记录 1 b+树非叶子节点记录 2最小记录 3最大记录
next_record 当前记录的真实数据到下条记录的真实数据的地址偏移量 最小记录是第一个 最大记录是最后一个,注意nextRecoed在真实数据与记录头信息之间
页目录page directory
1. 将未删除的记录分组
2. 每组的最后一条记录的n_owned记录本组记录数
3. 每组最后一条记录的偏移量存入page directory
规定: 最小记录所在组只能有7条记录 最大记录所在组至多7条,剩下的分组至多8条记录
示例:
1. 初始情况下只有最大记录与最小记录 两个组
2. 插入数据从page directory中查找大于插入主键 并且与插入主键差值最小的组 放入记录,并把该槽位的n_owned+1
3. 当组中n_owned等于8,再插入时 把9条数据分成两个组,page directory中新增一个槽存储 新增组最大主键的偏移值
页面头部page header
page header记录这页的状态信息 记录有多少记录有多少槽等
1. PAGE_N_DIR_SLOTS 页目录中槽
2. PAGE_HEAP_TOP 还未使用的空间最小地址该地址之后就是free space
3. PAGE_N_HEAP 本页中记录的数量 (最大最小记录+被删除的记录+正常记录)
4. PAGE_FREE 第一个已经标记为删除的记录的地址
5. PAGE_GARBAGE 已删除记录占用的字节数
6. PAGE_LAST_INSERT 最后插入记录的位置
7. PAGE_DIRECTION 记录插入方向 新增主键大于之前的主键page direction 向右
文件头部 file header
1. FIL_PAGE_SPACE_OR_CHKSUM 页的校验和 对于较长的值通过某种算法计算出较短的值 这个比较短的值就是校验和
2. FIL_PAGE_OFFSET 页号
前4个字节代表也的校验和
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!