Sql Server 中 GAMSGAMPAMIAMDCM 和 BCM 的详解与区别

Posted gered

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql Server 中 GAMSGAMPAMIAMDCM 和 BCM 的详解与区别相关的知识,希望对你有一定的参考价值。

 

GAM、SGAM、PAM、IAM、DCM 和 BCM 都是 SQL Server 中用来管理空间分配的一些特殊分配映射表。理解他们的区别与作用,对于理解 Sql Server 物理数据库体系结构有着非常重要的作用。

Sql Server 区的管理(GAM,SGAM)

全局分配映射表 (GAM) :统一盘区,GAM 页记录已分配的区。每个 GAM 包含 64,000 个区,相当于近 4 GB 的数据。GAM 用一个位来表示所涵盖区间内的每个区的状态。如果位为 1,则区可用;如果位为 0,则区已分配。

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

Sql Server 可用空间的管理(PFS)

PFS(Page Free Space):也叫页面自由空间,该页面用来跟踪一个文件中每一个特定的页面的利用率情况,是以页为单位的。一个文件中第二个页面(页码1)就是PFS页面,该页面的每个字节都记录了相应页面的分配情况、页面类型、是否IAM页、是否包含删除记录、以及空间利用率信息;PFS能够管理和跟踪8088个页面的使用情况,即接近64M的空间,以后每8088个页面将再出现一次。


Sql Server 对象使用空间的管理(PFS)


"索引分配映射 (IAM)"页:将映射分配单元使用的数据库文件中 4 GB 部分中的区。主要用来标示 Sql Server 对象使用了哪些区。比如A表的非聚集索引B占用了 7895 4个区。这样,在再对此对象做更改的时候,能够快速的找到这4个区,更改文件。

当 SQL Server 数据库引擎必须在当前页中插入新行,而当前页中没有可用空间时,它将使用 IAM 和 PFS 页查找要将该行分配到的页,或者(对于堆或 Text/Image 页)查找具有足够空间容纳该行的页。数据库引擎使用 IAM 页查找分配给分配单元的区。对于每个区,数据库引擎将搜索 PFS 页,以查看是否有可用的页。每个 IAM 和 PFS 页覆盖大量数据页,因此一个数据库内只有很少的 IAM 和 PFS 页。这意味着 IAM 和 PFS 页通常位于内存中的 SQL Server 缓冲池中,所以能够很快找到它们。对于索引,新行的插入点由索引键设置。在这种情况下,不会出现上述搜索过程。

Sql Server 对已修改区得管理(DCM、BCM)

差异更改映射表 (DCM) :

这样便可以跟踪自上次执行 BACKUP DATABASE 语句后更改过的区。如果扩展盘区的位是 1,则自上次执行 BACKUP DATABASE 语句后扩展盘区已被修改。如果位是 0,则扩展盘区没有被修改。 

差异备份只读取 DCM 页便可以确定已修改的区。这样大大减少了差异备份必须扫描的页数。运行差异备份所需的时间与自上次执行 BACKUP DATABASE 语句之后修改的区数成正比,而不是与整个数据库的大小成正比。 


大容量更改映射表 (BCM) :

跟踪自上次执行 BACKUP LOG 语句后,被大容量日志记录操作修改的区。如果某个扩展盘区的位是 1,表明自上次执行 BACKUP LOG 语句后,该扩展盘区已经被有日志记录的大容量复制操作修改。如果位是 0,则该扩展盘区未被有日志记录的大容量复制操作修改。 

尽管所有数据库中都显示 BCM 页,但只有在数据库使用大容量日志记录恢复模式时,才会与 BCM 页有关。在此恢复模式中,当执行 BACKUP LOG 时,备份进程将扫描 BCM 查找已经修改的区。然后,将那些区包括在日志备份中。如果数据库从数据库备份和一系列事务日志备份恢复,便可以恢复大容量日志记录操作。在使用简单恢复模式的数据库中,BCM 页是不相关的,因为大容量日志记录操作不记入日志。在使用完整恢复模式的数据库中,BCM 页同样不相关,因为该恢复模式将大容量日志记录操作视为有完整日志记录的操作。 

DCM 页和 BCM 页的间隔与 GAM 和 SGAM 页的间隔相同,都是 64,000 个区。在物理文件中,DCM 和 BCM 页位于 GAM 和 SGAM 页之后。

 

转自:http://www.cnblogs.com/xunziji/archive/2011/02/22/1961465.html






























以上是关于Sql Server 中 GAMSGAMPAMIAMDCM 和 BCM 的详解与区别的主要内容,如果未能解决你的问题,请参考以下文章

有大神知道,sql server 中如何批量执行sql语句吗?

sql server2000中CONVERT中各个参数的意思

如何在 AG Listener SQL Server 中添加数据库,并在主 SQL Server 和辅助 SQL Server 上创建?

SQL 查询在 SQL Server CE 中很慢,但在 SQL Server 中很快

sql server的问题

如何使用sql server数据库中的标量值函数