15

SQLServer:页及区的状态和分配

有三个缩写词:GAM,SGAM,PFS。
GAM(全局分配映射表),GAM页记录已分配的区,每个GAM包含64,000个区,相当于404GB的数据。GAM用一个位来表示所涵盖区间内的每个区的状态,如果位为1,则区可用,否则已分配。
SGAM(共享全局分配映射表),同GAM一样,不过SGAM是用来监控混合区的,如果至少有一个页未有,则标志位为1,否则所有页都在使用中。
FPS(页可用空间),记录每页的分配状态,是否已分配单个页以及每页的可用空间量。PFS 对每页都有一个字节,记录该页是否已分配。如果已分配,则记录该页是为空、已满 1% 到 50%、已满 51% 到 80%、已满 81% 到 95% 还是已满 96% 到 100%。

将区分配给对象后,数据库引擎将使用 PFS 页来记录区中的哪些页已分配或哪些页可用。数据库引擎必须分配新页时,将使用此信息。保留的页中的可用空间量仅用于堆和 Text/Image 页。数据库引擎必须找到一个具有可用空间的页来保存新插入的行时,使用此信息。索引不要求跟踪页的可用空间,因为插入新行的点是由索引键值设置的

在数据文件中,PFS 页是文件头页之后的第一页(页码为 1)。接着是 GAM 页(页码为 2),然后是 SGAM 页(页码为 3)。第一个 PFS 页之后是一个大小大约为 8,000 页的 PFS 页。在第 2 页的第一个 GAM 页之后还有另一个 GAM 页(包含 64,000 个区),在第 3 页的第一个 SGAM 页之后也有另一个 SGAM 页(包含 64,000 个区)。下图显示了数据库引擎用来分配和管理区的页顺序。

 

已经有 2 评论了
  • notme @ 2009-9-12 7:56:39

    GAM我记得是4GB不是40GH

  • 盒子 @ 2009-9-15 10:59:05

    确实是4GB,估计是当时手误吧,改了

发表评论
 名字(必须)
 邮箱(可选)
 网址(可选)