mysql数据页结构

编程入门 行业动态 更新时间:2024-10-13 06:20:54

mysql数据页<a href=https://www.elefans.com/category/jswz/34/1771419.html style=结构"/>

mysql数据页结构

第4篇笔记~

上一篇是一行数据的结构,这篇是MySQL和内存交互的页结构整理,学习参考小孩子的《MySQL是怎样运行的:从根儿上理解MySQL》

数据页结构的快速浏览

数据页的存储空间大致被划分成了7个部分,

* File Header,文件头部,占38字节,页的一些通用信息

* Page Header,页面头部,56字节,数据页专有的一些信息

* Infimum+Supremum,最小记录和最大记录,26字节,两个虚拟的行记录

* User Records,用户记录,实际存储的行记录内容

* Free Space,空闲空间,页中尚未使用的空间

* Page Directory 页面目录,页中的某些记录的相对位置

* File Trailer 文件尾部,8字节,检验页是否完整

页中记录的存储

在一开始生成页的时候,其实并没有User Records,每当插入一条记录,都会从Free Space申请一个记录大小的空间划分过来,当空间全部被User Records替代后,就意味着这个页使用完了,再有新记录插入就需要申请新的页。

记录之间的关系

当前记录里的next_record是当前记录的真实数据导下一条记录真实数据的地址偏移量。

记录按照主键从小到大的顺序形成一个单链表,指针指向下一条记录的头信息和真实数据的中间位置,最小记录(伪记录)指向本页中主键值最小的用户记录,本页中主键值最大的用户记录的下一条记录是最大记录(Supremum)

删除记录时,会把当前记录的delete_mark标记,再次插入同样主键值的记录时,会重用这部分空间。

Page Director 页目录

制作过程:

1.将所有正常记录划分为几个组;

2.每个组的最后一条记录(即组内最大的那条记录)的头信息中的n_owned属性表示该记录拥有的记录条数

3.将最大记录的地址偏移量提取出来按顺序存储到靠近页尾部的地方,即页目录,页面目录中的这些地址偏移量被称为槽,页面目录就是由槽组成。

注意点:

对于每个分组中的记录条数有规定:最小记录所在的分组只能有1条记录,最大记录所在的分组拥有的记录条数在1~8条之间,剩下的分组中记录条数在4~8条之间;

添加一条记录的步骤

初始情况下一个数据页里只有最小记录和最大记录,分属于两个分组;

之后每插入一条数据,都会从页目录中找到主键值比本记录的主键值大并且差值最小的槽,然后把该槽的n_owned值+1,直到该组中的记录数等于8个。

在一个组中的记录数等于8个后再插入一条记录时,会将组中的记录拆分成两个组,一个组4条,另一个5条。这个过程会在页目录中新增一个槽来记录这个新增分组中最大的那条记录的偏移量。

查找一条记录的过程

通过二分法确定该记录所在的槽,并找到该槽中主键值最小的那条记录,(槽是挨着的,找上一个槽的最大记录,接下来就是该槽的最小值)

通过记录的next_record属性遍历该槽所在的组中的各个记录。

Page Header 页面头部

一个数据页中存储的记录的状态信息,是页结构的第2部分,占用固定的56个字节,专门存储各种状态信息:如页目录中的槽数量、该页中的记录数量、已删除记录占用的字节数等

PAGE_DIRECTION 假如新插入的一条记录的主键值比上一条记录的主键值大,表示这条记录的插入方向是右边,反之是左边。这个字段表示插入的方向

PAGE_N_DIRECTION 表示沿着同一个方向插入记录的条数,如果最后一条记录的插入方向改变,这个状态的值会被清零

File Header 文件头部

这部分是各个不同类型的页的通用部分,描述了各种页都通用的一些信息,如页的编号、上一个页、下一个页等。占用固定的38个字节。

!File Header

FIL_PAGE_SPACE_OR_CHKSUM 代表当前页面的校验和(长字符串用某种算法来计算一个比较短的值来代表)

FIL_PAGE_OFFSET 单独的页号

FIL_PAGE_TYPE 当前页的类型,如FIL_PAGE_INDEX索引页即数据页等

FIL_PAGE_PREV 和FIL_PAGE_NEXT 为了把分散到不连续页中关联起来。数据页类型是有这个属性,并不是所有的类型都有这些属性。

File Trailer

为了检测一个页是否完整(在把页数据同步到磁盘的过程中断电了的情况),在每个页的尾部加了这个File Trailer,这部分由8个字节组成,分2个部分。

前4个字节代表页的校验和,和File Header中的校验和相对应,因为File Header在页的前边,校验和会被首先同步到磁盘,当完全写完时,校验和也会被写到页的尾部,如果完全同步,则页的首部和尾部的校验和应该是一致的。

后4个字节代表页面被最后修改时对应的日志序列位置(LSN),也是为了校验页的完整性

推荐下

标签:字节,记录,插入,键值,File,mysql,数据,PAGE,结构

来源: .html

更多推荐

mysql数据页结构

本文发布于:2024-02-08 21:11:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1675096.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:结构   数据   mysql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!