今天来进一步探讨更细节的几个问题
像是XDES Entry结构到底储存在表格空间的那边?
直属於表格空间的链结串列基节点储存在表格空间那边?
每个段对应的INODE Entry结构储存在表格空间那边?
为此我们需要更进一步了解前面提到的一些分组前面的固定页面
FSP_HDR类型。
我们知道这页用来登记整个表格空间的一些整体属性及本组所有区的属性。
其实XDES Entry结构就是储存在这里。
这页包含了
这里File Header、File Trailer不特别强调,Empty Space这也不用管它
我们看两个重要的属性就好
第一个File Space Header
第二个XDES Entry
再来XDES Entry的部分,由於一个XDES Entry结构的大小是40位元组,由於一个页面的大小有限,只能存放一定数量的XDES Entry结构,所以才把256个区画成1组,每组的第一页存放256个XDES Entry结构。
所以我们前面的问题都有了答案
像是XDES Entry结构到底储存在表格空间的那边?
直属於表格空间的链结串列基节点储存在表格空间那边?
每个段对应的INODE Entry结构储存在表格空间那边?
都是存在每组最开始的第一页
XDES类型
大家还记得其余各组最开始二页的类型是固定的,第一页是XDES页,用来登记本组256个区的属性。基本上它的内容跟FSP_HDR几乎一样,差别只在於XDES没有File Space Header(纪录表格空间的一些整体属性资讯)。
IBUF_BITMAP类型
所有组别的第二页都是IBUF_BITMAP页,用来储存关於Change Buffer的一些资料。
我们在表中插入一笔纪录,本质上是向每个索引对应的B+树插入纪录。该纪录先插入聚簇索引页面,然後再插入每个二级索引页面。这些页面在表格空间中随机分布(虽然有双向链结串列串在一起,但物理记忆体上是不连续的,所以磁碟需要重新定位),也产生大量的随机I/O,严重影响性能。所以引入了Change Buffer结构(本质上也是表格空间中的一颗B+树,它的根节点储存在系统表格空间中)。在修改非唯一二级索引页面时,如果该页尚未被载入到记忆体中(仍在磁碟),那麽该修改先暂时快取到Change Buffer,等其需要载入到记忆体,才将修改合并到对应页面。(以前只会快取Insert操作,所以Change Buffer以前被称为Insert Buffer[IBUF],但现在Update跟Delete也会快取)
INODE类型
第一组的第三页是INODE,顾名思义就是为了储存INODE Entry结构而存在的,也就是说跟第一页有些类似。内容如下:
这页包含了
<<: Unity自主学习(一):认识2D/3D游戏引擎-Unity
>>: [想试试看JavaScript ] HTML DOM
Linked List 指的是一群资料存在於不连续的记忆体空间~ 其中每个节点包含~ 资料 及 指标...
前情提要 郑列疑似烙下狠话,正要展现工具实力?! 郑列:我说啊,你知道身为工具人要会做哪些事吗? 答...
一天的开始 你是新创公司 Imager 底下的前端工程师,Imager 提供的服务非常简单,就是能...
铁人赛第四天!简单整理下昨日分享的输入方法有两种: 直接输入:直接把值本身当成输入。 间接输入:透过...
今天的 TextField 和明天的 FormControl 都是在介绍跟表单有关的介面和元件,而...