SQL Server 数据库结构

全局分配映射表 (GAM)
GAM 页记录已分配的区。每个 GAM 包含 64,000 个 区,相当于近 4 GB 的数据(每个区占用一位,每八个区占用一个字 节,每个页大概可用字节为8000个字节,所以能管理4GB的数据)。GAM 用 一个位来表示所涵盖区间内的每个区的状态。如果位为 1,则区可用;如果 位为 0,则区已分配。

共享全局分配映射表 (SGAM)
SGAM 页记录当前用作混合区且至少有一个未使用的页的区。每个 SGAM 包含 64,000 个区,相当于近 4 GB 的数据。SGAM 用一个位来表示所涵盖区间内的每个区的状 态。如果位为 1,则区正用作混合区且有可用页。如果位为 0,则区未用作混合区,或者虽然用作混合区但其所有页均在使用中。

区的当前使用情况 GAM 位设置 SGAM 位设置
可用,未使用 1 0
统一区或已满的混合区 0 0
具有可用页的混合区 0 1

这样,数据库在分配对象的时候,先去找混合区,那还有未使用的混合区就是到GAM页和SGAM页里 对应的0或者1.

PFS:

Free space page,他用来跟踪页面的使用者状态,到底是满的还是空 的,还是只是使用了百分之几十。每个页面都有一个对应的字节来描述,所以,每个pfs页面只能管理约8000个页面。数据库引擎将使用 PFS 页来记录区中的哪些页已分配或哪些页可用。数据库引擎必须分配新页时,将使用 此信息。保留的页中的可用空间量仅用于堆和 Text/Image 页。 数据库引擎必须找到一个具有可用空间的页来保存新插入的行时,使用此信息。索引不要求跟踪页的可用空间,因为插入新行的点是由索引键值设置的。

原文地址:https://www.cnblogs.com/qianyz/p/1846563.html