标签:不同 mask 记录 根据 com r文件 偏移量 单链表 位置
InnoDB管理存储空间的基本单位,一个页一般是16kb。InnoDB有多种类型的页用于存储不同信息。我们以记录为单位将数据存储在表中,所以存放记录的页又称数据页。数据页是一个双链表记录记录上下页信息。
file header文件头部(38byte):描述页的基本信息,比如页号,页类型,上页下页信息(促使数据页组成双链表结构)。
page header页面头部(56byte):存储数据页中存储记录的状态值,比如页目录中槽数量,本页的记录数量等
Infimum + supremum最小大记录(26byte)
user records用户数据(unkown):存储记录。为更好的管理记录,InnoDB以指定的行格式(分析见下方)存储记录
free space 空闲空间(unkown):每次插入记录都会从free space申请一个记录大小的空间到user records,如果用完就申请新的页
page directory页文件(unkown):为提高根据主键查询记录的效率,InnoDB模仿书本目录,设计了页目录,并以二分法的方式查找;
- 将所有记录(包括最大最小,不包括已删除)划分为几个组
- 每个组的最后一条记录(也就是组内最大的那条记录)的头信息中的
n_owned
属性表示该记录拥有多少条记录,也就是该组内共有几条记录- 将每个组的最后一条记录的地址偏移量单独提取出来按顺序存储到靠近
页
的尾部的地方,这个地方就是所谓的Page Directory
,也就是页目录
(此时应该返回头看看页面各个部分的图)。页面目录中的这些地址偏移量被称为槽
(英文名:Slot
),所以这个页面目录就是由槽
组成的。- 最小记录所在组只能有1条记录,最大记录所在组有1-8条,其他4-8条。
- 二分法确定目标记录所在槽,找到该槽中主键最小的那条记录
- 通过记录的next record遍历该槽所在的组中的各个记录
file tailer文件尾部(8byte):用于校验页是否完整,如果在写入磁盘事,系统断电,可记录终止的位置。前4byte:记录页的校验和;后4byte:页面最后被修改时对应的日志序列位置LSN
有四种类型compact等,以compact为例,如下图所示
InnoDB
数据页的7个组成部分,知道了各个数据页可以组成一个双向链表
,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表
,每个数据页都会为存储在它里边儿的记录生成一个页目录
,在通过主键查找某条记录的时候可以在页目录
中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录
注:来自mysql是怎样运行的读书笔记
标签:不同 mask 记录 根据 com r文件 偏移量 单链表 位置
原文地址:https://www.cnblogs.com/hangzhi/p/10947953.html