暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL SERVER DBCC IND和DBCC Page

SQLServer分享 2021-04-29
1136

下面是我创建的表,然后详细讲解如何通过这两个命令,查看该表的页分布情况以及每个页里的具体信息。

CREATE TABLE Customers
(
   FirstName CHAR(50) NOT NULL,
   LastName CHAR(50) NOT NULL,
   Address CHAR(100) NOT NULL,
   ZipCode CHAR(5) NOT NULL,
   Rating INT NOT NULL,
   ModifiedDate DATETIME NOT NULL,
)

GO

INSERT INTO dbo.Customers
        ( FirstName ,
          LastName ,
          Address ,
          ZipCode ,
          Rating ,
          ModifiedDate
        )
VALUES  ( 'yuzk' , 'Tu' ,'hubeiwuhan', '0000' ,1 ,getdate())

首先使用命令:DBCC IND

语法如下:

DBCC IND ( { 'dbname' | dbid }, { 'objname' | objid },{ nonclustered indid | 1 | 0 | -1 | -2 } [, partition_number] )

DBCC IND的四个参数含义分别如下:

第一个参数:是数据库名或数据库ID。

第二个参数:是数据库中的对象名或对象ID,对象可以是表或者索引视图。

第三个参数:是一个非聚集索引ID或者 1, 0, 1, or 2,其具体的含义见括号内的描述

 0: 只显示对象的in-row data页和 in-row IAM 页。
 1: 显示对象的全部页,

      包含IAM 页, in-row数据页, LOB 数据页row-overflow 数据页 .

      如果请求的对象含有聚集索引则索引页也包括。
 -1: 显示全部IAM页,数据页, 索引页 也包括 LOB 和row-overflow 数据页。
 -2: 显示全部IAM页。
 Nonclustered index ID:

      显示索引的全部 IAM页, data页和索引页,包含LOB和 row-overflow数据页。

第四个参数:是可选的,该参数用于指定一个分区号.如果不给定值或者给定0, 则显示全部分区数据。(这个参数是为了兼容sql server 2000


示例:



可以看到有2条记录,一条记录为页面类型(PageType)为10的页和一条记录为页面类型(PageType)为1的页。页面类型(PageType)10是IAM页,页ID为141748,页面类型(PageType)1是数据页,它的页ID是 141747.


DBCC PAGE命令


语法如下:

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

DBCC PAGE的四个参数含义分别如下:

dbid|dbname:页面的数据库ID或者数据库的名称

filenum:包含页面的文件编号

pagenum 文件内的页面

printopt 可选的输出选项,这里有四个值可以选,该选项默认值为0

0:输出BUFFERpage header,Allocation Status

1:输出BUFFERpage header,Allocation Status,

    Data,行偏移量表
2:输出BUFFERpage header,Allocation Status,

    Data(包含十六进制dump),行偏移量表               

3:输出BUFFER、page header,Allocation Status,

    Data(包含每行的列的分布情况)

另外:

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


示例:

接着上面的例子,我们来查看上


现在我们来使用DBCC PAGE命令来查看页ID为141747,页类型为1数据页里存放的数据


DBCC TRACEON(3604)

DBCC PAGE(InternalStorageFormat,1,141747,1)


这里的命令的最后一个参数是1,所以输出四个部分:


第1部分是BUFFER:里面是一些内存分配信息

第2部分是页头(page header):96 bytes大小的页头

第3部分是数据区:Allocation Status,Data

第4部分是行偏移数组表

输出的信息比较多,我这里着重介绍几个关键信息


 第一部分:

 第二部分:

  



  备注:

  这里的可用空间偏移量实际上就是已经使用的空间,这里的空间包括页头的96bytes和

  数据的224bytes



  第三部分:


  备注:

  这一部分后面会单独讲GAM,SGAM,PFS,大概提下:

  SQL Server IO最小的单位是页,连续的8个页是一个

  SQL Server需要一种方式来知道其所管辖的数据库中的使用情况,

  这就是GAM页和SGAM页,用来标记哪些区使用,哪些区没有使用的页

  而PFS页是用来跟踪页分配的情况的。

  当分配页时,数据库引擎使用GAM与SGAM来确定有可用页的区。

   一旦数  据库引擎找 到有可用页的区

  它使用PFS页来确定在那个区里未分配的页,页里可用空间量是多少

  


 

   第四部分:

   这里因为只有一行数据,所以起始的数据的偏移量是96,就是页头的大小。


 

          

             长按下方二维码可以加关注


       



最后修改时间:2021-04-29 22:43:05
文章转载自SQLServer分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论