绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
File Space Header & xdes(5)FSP HDR独立表空间结构(三十一)
2023-01-31 09:48:13

前面我们说了段的结构,分了方便段管理区,段又分为inode entry链表来管理,分了方便管理区,区分为xdes entry链表来管理。

前面我们说了组extent0的个页面FSP_HDR的组成部分,下面主要介绍他的file space header和 xdes entry。

File Space Header部分

从名字可以看出,这部分组要存储表空间的一些整体属性:

space_id:4个字节,表空间id。

not used:4个字节,这四个字节未被使用,可以忽略。

size:4个字节,当前表空间占有的页面数。

free_limit:4个字节,尚未被初始化的小页号,大于或等于这个页号的区对应的xdes entry结构 都没有被加入free链表。

space flags:4个字节,表空间一些占用存储空间比较小的属性。

frag_n_used:4个字节,free_frag链表中已使用的页面数量。

List Base Node for free List:16个字节,free链表的基节点。

List Base Node for free_frag list:16个字节,free frag链表的基节点。

List Base Node for full_frag list:16个字节,full frag 链表的基节点。

Next unused segment id:8个子节,当前表空间下一个未使用的segment id。

List base node for seg_inodes_full list:16个字节,seg_inodes_full链表的基节点。

List base node for seg_inodes_free list:16个字节,seg_inodes_free 链表的基节点。

这里的space_id肯定就是表空间的主键,not used就是未使用的,size代表当前表空间有多少页面。

List base node for free List 和 List Base Node for free_frag list 和 List Base Node for full_frag list都属于表空间直管的链表基节点,都在表空间的个页面,也就是FSP HDR页面,方便之后定位这几个链表。

Free_limit:中心思想就是啥时候用到,啥时候初始化,因为我们磁盘上的结构,目录名称文件名称都是和表建立时候同名的,但是每次建立就申请空间这样开销很大,所以我们直接一次申请很大一部分,这样再磁盘上就有很多空闲的空间,这些就放在表空间直管的free链表中,啥时候用到啥时候就把需要用的初始化,于是这个字段前面的就是代表未初始化的,这个字段后面的就代表已经初始化可以使用的。

Next unused segments id:表中每个索引都会生成两个段,当我们创建一个索引的时候,就意味着创建两个段,新段这个id怎么来的呢,总之不是遍历以前的段,这样太耗费性能,这个字段就是记录大段id,当生成新id直接用大id的下一个id就好了。

Seg_inodes_full list 和 seg_inodes_free list:seg_inodes_full表示当前段里的链表中已经没有剩余空间存放inode entry了,seg_inodes_free表示还有剩余空间存放inode entry的链表。

XDES Entry 部分

前面我们已经详细介绍过xdes entry的结构 ,全程是extent descritor entry,这个部分就在表空间的个页中保存着。Extent0 和extent1的意思其实就是xdes entry0 和xdes entry1,我们把256个区分为一组,在每个组的个页存放着xdes entry部分。这样我们每个组的extent entry结构都是固定的,所以这里直接访问就很简单。


文章来源:知乎平台 原文地址:https://zhuanlan.zhihu.com/p/408358342

分享好友

分享这个小栈给你的朋友们,一起进步吧。

MySQL干货资料
创建时间:2020-05-06 14:18:32
每天都有干货输出哦
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~