PostgreSQL7.0手册-开发者手册 -68. 分页文件
内容
页面结构
文件
臭虫
一份描述数据库文件缺省页面格式的文档.
本章提供一个 Postgres 的表所使用的页面格式的概述.用户定义的访问模式不需要使用这些页面格式.
在下面解释中, 一个字节 假定包含 8 个位.另外,术语 item (条目)指的是存储在 Postgres 表里的数据.
页面结构
下面的表显示了通常的 Postgres 表和 Postgres 索引表(例如,一个 B-tree 索引)里的页面是如何构造的.
表 68-1. 样例页面布局
条目 描述
itemPointerData
filler
itemData...
Unallocated Space
ItemContinuationData
Special Space
``ItemData 2''
``ItemData 1''
ItemIdData
PageHeaderData
每个页面的头8字节包含一个页面头(PageHeaderData).在头里面,头三个2字节的整数域(lower 底,upper 高 ,和 special 特殊)分别代表相对于未分配空间开头的字节偏移量,相对于未分配空间结尾的偏移量和相对于 special space (特殊空间)开头的偏移量.特殊空间是位于页面尾部的空间,这部分空间在页面初始化时分配并且包含与一种访问模式的详细信息.页面头的最后 2 字节, opaque,记录页面尺寸和页面内部的碎片信息.页面尺寸存放在每个页面是因为在一个表里面缓冲池里面的帧可能会以一帧一帧的单位分解成等尺寸的页面.内部碎片信息用于帮助决定何时进行页面的重新组合.
跟在页面头后面的是条目标识 (ItemIdData).新的条目标识在未分配空间的头四个字节里分配.因为在条目被释放之前,条目标识决不会移动,所以它的索引可以用于表示一个条目在页面中的位置.实际上,Postgres 创建的每个条目标识指针 (ItemPointer) 都由一个桢个数和一个条目标识索引组成.一个条目标识包含一个与条目开头的字节偏移量,其长度以字节记,以及一套影响其转换(interpretation)的属性位.
条目本身是从未分配空间的尾部开始向后分配的空间中存储的.通常,这些条目不做转换.但是如果条目太长而不能放在一个页面里或者需要条目分解成碎片时,该条目将被分解并且每一部分用下面的方法当作独立的条目处理.第一个到倒数第二个条目片段被放到一个条目连贯结构 (ItemContinuationData) 里.这个结构包含 itemPointerData,该数据指向下一个片段和该片段本身.最后一个片段按正常方法操作.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
文件
data/
共享(全局)的数据库文件位置.
data/base/
本地数据库文件位置.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
臭虫
页面结构在未来可能会修改,以提供对大对象的更有效的访问.
本章包含作为书写一种新的访问模式的任何形式的帮助的不完整的细节.
--------------------------------------------------------------------------------