揭秘GAM,SGAM和PFS页

揭秘GAM,SGAM和PFS页


最后编辑:2010-11-09
原文地址:
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/07/08/under-the-covers-gam-sgam-and-pfs-pages.aspx

本文的升级版本:http://blog.csdn.net/misterliwei/archive/2010/10/13/5939524.aspx

 

正文:

前面一篇文章我介绍了区(extents) ,以前的一篇文章 我还介绍了IAM页是如何跟踪分配给IAM链的区和页的。但是我没有描述如何跟踪各个页的分配状态,或者说全局分配位图(global allocation bitmap)是如何工作的,这将是本文要介绍的。

请在脑海中记住:下面介绍的所有一切在SQL SERVER 2000和2005中都是一样的。

GAM页
GAM表示全局分配位图(global allocation map)。如果你还记得:数据库的数据文件被划为多个GAM区间(只是概念上的,并没有物理上划分,不要混淆)。一个GAM区间是GAM/SGAM/IAM中位图跟踪的空间的总和:64000区或者近4G。这三种类型页的位图一样大,每1位表示一个区,但是不同类型页的位表示不同的含义。

注意一件事:在每个GAM区间开始处是一个GAM区,该区包含跟踪该GAM区间的全局分配页,这个区不能当作正常的页被分配。

GAM位图中每位的含义如下:
1)位为1表示该区可用(你可以将它看作是当前分配给了GAM页了).
2)位为0表示该区已经被分配使用了。

混合区和统一区,上面的含义一致。

SGAM页
我记得去年曾经有一封email讨论过SGAM中的“S”到底表示什么?这些年来,在微软内外各种名字都是用过,但是联机图书上的官方名称用的是共享全局分配位图(Shared Global Allocation Map)。老实说,我们常称之为“es-gams”而从不拼出它。

就像我上面说的,SGAM位图与GAM位图的结构和覆盖区间完全一致,就是位表示的意思不同:
1)位为1表示区是混合区且有可用页。
2)位为0表示区未作混合区,或者虽然是混合区时但其所有页均在使用中。(本质上,同样的情况也说明SGAM被用来寻找还没有进行页分配的混合区)。

GAM,SGAM和IAM页
让我们来将GAM,SGAM和IAM页(还记得吗?在IAM位图中,若区被分配给IAM链/分配单元,则该位为1)结合在一起,看一下各个位的组合情况:


你可以看到8个组合中只有4个是有效的,其它的会造成某种损坏,且可能导致各种可怕的情形——更多这方面的情况以后专门发文介绍。

(但是我禁不住往下写点。肯定有人会这么问:“这些损坏是如何产生的呢?”。每个数据库页为8K字节,它实际上占用磁盘上16个512字节的扇区。假如一个非常奇怪的IO往GAM页的磁盘扇区中任意写了一些数据,就会造成多个IAM页都认为分配了相同的区…)

PFS页
PFS表示页可用空间。但是PFS页跟踪的远不止这些。和GAM区间相似,每个数据库文件同样也被分割成(概念上)PFS区间。一个PFS区间是8088页或约64MB。PFS页中不是位图,它是字节图,每个字节表示PFS区间中的一页(不包括PFS页本身)。
字节中每位的含义如下:
1)位0-2:页中有多少可用空间
  a)0x00表示空
  b)0x01表示1~50%满
  c)0x02表示51~80%满
  d)0x03表示81~95%满
  e)0x04表示96~100%满
2)位3(0x08):页中是否至少有一个ghost记录?
3)位4(0x10):是否为IAM页?
4)位5(0x20):是否为混合页?
5)位6(0x40):页是否已分配?(分配状态位)

比如一个IAM页的PFS字节为0x70(已分配 + IAM页 + 混合页)。你可以使用DBCC PAGE来查看PFS页。
跟踪可用空间只适用于存储LOB值(比如SQL SERVER 2000中的text/image类型;SQL SERVER 2005中再加上varchar(max)/varbinary(max)/XML类型以及行溢出数据)和堆数据页。因为只有这些页存储的数据不用排序,所以可以在任何位置插入。而像索引是有明确的顺序的,所以插入点是没有选择的。

重置PFS字节不是很直观的。就在昨天,我还帮几个MVP解答“一个PFS字节为0x04的页,它是如何做到既满而又没有分配的?”
答案是:(页释放时)PFS字节不会全部重置,直到该页被重新分配。在页被释放时,PFS字节中只有1位会变化——分配状态位,这样要是回滚的话就很简单了。

下面是一个例子。在数据库中表T1只有一行数据。使用DBCC PAGE检查IAM页如下:
PFS (1:1) = 0x70 IAM_PG MIXED_EXT ALLOCATED 0_PCT_FULL

如果我运行下面的语句:
BEGIN TRANSACTION
DROP TABLE T1
GO

此时再次运行DBCC PAGE,结果如下:
PFS (1:1) = 0x30 IAM_PG MIXED_EXT 0_PCT_FULL

我们如果回滚事务,那么DBCC PAGE的输出结果又变成:
PFS (1:1) = 0x70 IAM_PG MIXED_EXT ALLOCATED 0_PCT_FULL

现在,这三种类型的页都已经讨论完了,我们终于可以自由地讲分配检查和损坏了。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
GAM和SE都是在目标检测网络中常用的注意力机制。GAM代表全局注意力模块(Global Attention Module),而SE代表通道注意力模块(Squeeze-and-Excitation)。 GAM注意力机制是一种通过在全局图像中获取重点关注目标的方法。它可以通过全局平均池化和全连接层来学习权重,然后对特征图进行加权求和,以增强重要目标的表示能力。GAM可以有效地提取图像中的关键信息,提高目标检测的精度。 SE注意力机制主要关注通道间的关系,它通过使用全局平均池化和通道间的全连接层来学习每个通道的权重。然后,这些权重被应用于输入特征图上的每个通道,以增强重要通道的表示能力。SE注意力机制能够提升网络对不同通道的敏感度,从而提高目标检测的性能。 尽管GAM和SE都是注意力机制,但它们在实现上有一些不同之处。GAM主要通过全局信息来加强目标的表示能力,而SE则通过学习通道之间的关系来提高网络对通道的敏感度。这两种方法都可以显著改善目标检测的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [学习笔记1——常用的注意力机制(即插即用)](https://blog.csdn.net/daige123/article/details/125750345)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [GAM注意力机制](https://blog.csdn.net/zqx951102/article/details/127750927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值