Xdes&Inode&Seg Header(6) 独立表空间结构(三十二)

简介: Xdes&Inode&Seg Header(6) 独立表空间结构(三十二)

前面说了每256个区为一组,而FSP HDR是第一个组extent0 里面第一个页,这里面有特殊的file space Header部分,整个表空间直属管理,存着free链表,free_frag链表,full_frag链表,及其fseg里面的free,not full,full链表的基点,方便以后定位。


因为在磁盘中操作是非常耗性能的,所以不可能每次创建一个表,都去申请空间存放,于是就有了free_limit的,一次性申请很大的空间,这个字段之前的是未被初始化,之后的是已经初始化并且使用的。


及其xdes部分,每个组都有256个区,每个区都有一个对应的xdes entry结构,这256个entry都存在第一个页中。


File Space Header & xdes(5)FSP HDR独立表空间结构(三十一)




XDES类型


虽然一个xdes enrty只有40个字节,但架不住数量多,所以把256个区分为一个组,每个组的第一个页面存放xdes entry,以后每个区都有这个xdes类型,不同的是extent0里面叫fsp hdr,而fsp 整个表空间唯一一个页面,并且里面有file space header部分,以后的页面里只有xdes类型。




IBUF_BITMAP类型


每个分组的第二页都是IBUF_BITMAP类型,这里面记录着change buffer的东西,之后会详细介绍这里。




INODE类型


我们回忆一下,FSP HDR属于第一个extent0.这里面还有一个特殊的inode类型页,这个就是为了管理端的inode entry,他由几个部分组成:


file header:38个字节,页的通用信息。

List node for inode page list:12个字节,存储当前页的位子,和上下页的偏移。

INODE Entry:段的描述,存储着inode entry0,inode entry1等等。

Empty space:6个节点,尚未使用的空间,用于页结构的填充。

File Trailer:文件尾部,效验页是否完整。



我们重点关注list node for inode page list,inode entry。


Inode entry之前都介绍过,里面有segment id,和三个链表,free,not full,full链表,每个inode entry有192个字节,一个页可以存储85个这样的结构。


List node for inode page list:因为表空间有超过85个段,inode 类型页不足以存储那么多数据,所以mysql将inode类型串联成两个不同的链表:


seg_inode_full链表:该链表里的inode类型页已经没有空闲空间来存储inode entry。

seg_inode_free链表:该链表里的inode类型页还可以存放inode entry。

这里是不是很熟悉,他们两个的基节点都在file space header里面,所以查找这两个链表的时候很容易找到,当找到就先看seg_inode_free链表是否有空闲的空间,有的话直接放入数据,如果没有,则吧seg_inode_free的数据存入


Seg_inode_full里面。


当链表为null的时候,就从free_frag里申请一个页面,修改该页面类型为inode,吧这个放入seg_inode_free里面,同事吧inode entry放入该页面。




Segment header 结构运用

我们知道一个索引会有一个叶子节点和非叶子节点,所以就是有两个段,那我们怎么知道某个段对应那个inode entry呢,所以我们在这个segment header里记录下关系。我们之前记录的数据页里有一个page header,里面有


Page_btr_seg_leaf:10个字节,b+树叶子段的头部信息,仅在根页定义。


Page_btr_seg_top:10个字节,b+树非叶子段的头部信息,仅在根页定义。


他们都有一个对应的segment header结构:


space id of inode entry:对应inode entry所在的表空间。

page number of inode entry:对应的inode entry 所在的页面号。

byte offset of inode entry:对应inode entry偏移量。

他们一个记录着叶子段的信息,一个记录着非叶子段的信息。不过需要注意的是,因为一个索引只对应两个段,所以只需要索引的根目录记录着这两个结构就好。


相关文章
|
8月前
|
存储 算法 编译器
2.7 PE结构:重定位表详细解析
重定位表(Relocation Table)是Windows PE可执行文件中的一部分,主要记录了与地址相关的信息,它在程序加载和运行时被用来修改程序代码中的地址的值,因为程序在不同的内存地址中加载时,程序中使用到的地址也会受到影响,因此需要重定位表这个数据结构来完成这些地址值的修正。当程序需要被加载到不同的内存地址时,相关的地址值需要进行修正,否则程序运行会出现异常。而重定位表就是记录了在程序加载时需要修正的地址值的相关信息,包括修正地址的位置、需要修正的字节数、需要修正的地址的类型等。重定位表中的每个记录都称为一项(entry),每个entry包含了需要修正的地址值的详细信息,通常是以可变
92 0
2.7 PE结构:重定位表详细解析
|
8月前
|
Windows
2.8 PE结构:资源表详细解析
在Windows PE中,资源是指可执行文件中存放的一些固定不变的数据集合,例如图标、对话框、字符串、位图、版本信息等。PE文件中每个资源都会被分配对应的唯一资源ID,以便在运行时能够方便地查找和调用它们。PE文件中的资源都被组织成一个树形结构,其中最顶层为根节点(Root),下一级为资源类型(Type),再下一级为资源名称(Name),最终是实际的资源内容。PIMAGE_RESOURCE_DIRECTORY是Windows PE可执行文件中的一个结构类型,用于描述资源(Resource)的树形结构,其中包括了每个资源的类型(Type)、名称(Name)和语言(Language),以及指向下一
85 0
2.8 PE结构:资源表详细解析
|
8月前
|
存储 Windows
2.6 PE结构:导出表详细解析
导出表(Export Table)是Windows可执行文件中的一个结构,记录了可执行文件中某些函数或变量的名称和地址,这些名称和地址可以供其他程序调用或使用。当PE文件执行时Windows装载器将文件装入内存并将导入表中登记的DLL文件一并装入,再根据DLL文件中函数的导出信息对可执行文件的导入表(IAT)进行修正。
150 1
|
8月前
|
存储 安全 API
2.1 PE结构:文件映射进内存
PE结构是`Windows`系统下最常用的可执行文件格式,理解PE文件格式不仅可以理解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,在任何一款操作系统中,可执行程序在被装入内存之前都是以文件的形式存放在磁盘中的,在早期DOS操作系统中,是以COM文件的格式存储的,该文件格式限制了只能使用代码段,堆栈寻址也被限制在了64KB的段中,由于PC芯片的快速发展这种文件格式极大的制约了软件的发展。
245 0
|
存储 索引
File Space Header & xdes(5)FSP HDR独立表空间结构(三十一)
File Space Header & xdes(5)FSP HDR独立表空间结构(三十一)
|
存储 关系型数据库 数据库
Data dictionary header(2) --系统表空间结构(三十四)
Data dictionary header(2) --系统表空间结构(三十四)
|
存储 前端开发 关系型数据库
区的分类&XDES Entry(3)---独立表空间结构(二十九)
区的分类&XDES Entry(3)---独立表空间结构(二十九)
|
存储 关系型数据库 MySQL
段的结构 (4)---独立表空间结构(三十)
段的结构 (4)---独立表空间结构(三十)
|
存储 关系型数据库 MySQL
整体结构&InnoDB数据字典(1) --系统表空间结构(三十三)
整体结构&InnoDB数据字典(1) --系统表空间结构(三十三)
|
存储 关系型数据库 MySQL
独立表空间结构(1)之区---InnoDB表空间(二十七)
独立表空间结构(1)之区---InnoDB表空间(二十七)