技术开发 频道

SQL Server 2008存储结构之GAM、SGAM

       关于数据库页类型如下所示:

类型页面类型名称页面类型描述
1Data page堆表和聚集索引的叶子节点数据
2Index page聚集索引的非叶子节点和非聚集索引的所有索引记录
3Text mixed pageA text page that holds small chunks of LOB values plus internal parts of text tree. These can be shared between LOB values in the same partition of an index or heap.
4Text tree pageA text page that holds large chunks of LOB values from a single column value.
7Sort page排序时所用到的临时页,排序中间操作存储数据用的。
8GAM page全局分配映射(Global Allocation Map,GAM)页面 这些页面记录了哪些区已经被分配并用作何种用途。
9SGAM page共享全局分配映射(Shared Global Allocation Map,GAM)页面 这些页面记录了哪些区当前被用作混合类型的区,并且这些区需含有至少一个未使用的页面。
10IAM page.有关每个分配单元中表或索引所使用的区的信息
11PFS page.有关页分配和页的可用空间的信息
13boot page.记录了关于数据库的信息,仅存于每个数据库的第9页
15file header page记录了关于数据库文件的信息,存于每个数据库文件的第0页
16DCM page记录自从上次全备以来的数据改变的页面,以备差异备份
17BCM page有关每个分配单元中自最后一条 BACKUP LOG 语句之后的大容量操作所修改的区的信息

  实际上SQLServer还包括一些未公开的页面类型,例如type 19,type 14等等。

  本章我们主要介绍GAM页和SGAM页,其他页面类型会稍后介绍。

  那么如何查看页面信息呢,从SQLServer2000起便开始提供了一个读取数据页结构的命令DBCC Page。该命令为非文档化的命令,具体如下:

  DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])

  具体参数描述如下:

  dbid               包含页面的数据库ID

  dbname       包含页面的数据库的名称

  filenum         包含页面的文件编号

  pagenum      文件内的页面

  printopt            可选的输出选项;选用其中一个值:

                            0:默认值,输出缓冲区的标题和页面标题

                           1:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表

                           2:输出缓冲区的标题、页面标题(整体输出页面),以及行偏移量表

                           3:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表;每一行后跟分别列出的它的列值

  如果要想看到这些输出的结果,还需要设置DBCC TRACEON(3604)。

  如前文所述,GAM页一定存在于该数据库的第二个页面,SGAM页则一定存在于该数据库的第三个页面;而每一个数据库都会存在文件编号为1的数据库文件,所以我们执行以下命令即可。

DBCC TRACEON(3604)
DBCC PAGE(TESTDB,
1,2,1)  —查看GAM页信息
DBCC PAGE(TESTDB,
1,3,1)  —查看SGAM页信息
DBCC PAGE(TESTDB,
1,2,2)  —查看GAM页信息和整体输出页面
DBCC PAGE(TESTDB,
1,3,2)  —查看SGAM页信息和整体输出页面
DBCC PAGE(TESTDB,
1,2,3)  —查看GAM页信息及相应列值
DBCC PAGE(TESTDB,
1,3,3)  —查看SGAM页信息及相应列值
DBCC PAGE(TESTDB,
1,2,1) WITH TABLERESULTS  —以表格形式查看SGAM页信息及相应列值
DBCC PAGE(TESTDB,
1,3,1) WITH TABLERESULTS  —以表格形式查看SGAM页信息及相应列值

 

  我们可以看到一个完整的页面分为四个部分;BUFFER、PAGE HEADER、DATA和OFFSET TABLE。

  让我们首先从GAM页开始看起:

  BUFFER部分:

  显示给定页面的缓冲信息,是内存中的结构,用于管理页面,该信息仅当该页面处于内存时才有意义。关于这个部分我们知之甚少,基本上无法找到相关材料。

BUF @0x03585CD8每一次清空缓存再次查询,地址都会改变
bpage = 0x060B4000每一次清空缓存再次查询,地址都会改变
bhash = 0x00000000相对不变
bpageno = (1:2)当前页面地址
bdbid = 8sys.databases.database_id
breferences = 1每一次清空缓存再次查询,地址都会改变
bUse1 = 41490每一次清空缓存再次查询,地址都会改变
bstat = 0xc00009相对不变
blog = 0x59ca2159相对不变
bnext = 0x00000000相对不变
  

0
相关文章