DBCCPAGE、DBCCLOG、DBCCEXTENTINFO、DBCCIND、DBCCSHOW_STATISTICS、DBCCSHOWCONTIG、DBCCSQLPERF(一)

2014-11-24 17:06:35 · 作者: · 浏览: 0

下面的代码,产生的结果可能和你测试时的结果有所不同,所以需要以实际的值为准。

1、DBCC PAGE

语法:

dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])

The printopt parameter has the following meanings:

0 - print just the page header
1 - page header plus per-row hex dumps and a dump of the page slot array (unless its a page that doesn't have one, like allocation bitmaps)
2 - page header plus whole page hex dump
3 - page header plus detailed per-row interpretation

实例:

--1.先建表
if OBJECT_ID('test') is not null
   drop table test

CREATE TABLE test(idd INT NOT NULL,name VARCHAR(10) NULL)

INSERT INTO TEST
SELECT 1,'abcdefg'
UNION ALL
SELECT 2,'hijklmn'

--SELECT * FROM TEST

SELECT *
FROM sys.tables 
WHERE name = 'test'

--2.查询元数据
--hobt_id : 72057594043236352
SELECT hobt_id
FROM sys.partitions
WHERE object_id = object_id('test')

/*
first_page :0x790500000100

拆分成2部分:0100和79050000

这2部分要翻转,也就是0001 和 00000579

前面表示fileId,后面是pageId,都是16机制的表示方法,

通过calc计算器的转换,就是10进制就是1和1401

*/
SELECT first_page    --转换值的顺序
FROM sys.system_internals_allocation_units
WHERE container_id = 72057594043236352

--3.这里创建一个表,用来存放dbcc page的结果
if exists(select * from sys.tables where name = 'dbcc_page')
   drop table dbcc_page
go
create table dbcc_page
(
ParentObject varchar(500),
Object       varchar(2000),
Field        varchar(1000),
Value        nvarchar(max)
)
go

--4.参数分别是数据库名,fileid,pageid,显示格式
--注意:这里是在自己的电脑上实验,用的master数据库,大家不要在正式的服务器上尝试
/*
--这样会报错,只能采用下面的,建一个存储过程
insert into dbcc_page(ParentObject,Object,Field,Value)
DBCC page(master,1,1401,3) with tableresults

*/
if exists(select * from sys.procedures where name = 'proc_dbcc_page')
   drop procedure proc_dbcc_page
go

create procedure proc_dbcc_page
as

DBCC page(master,1,1401,3) with tableresults

go

--5.把dbcc page的结果插入到表中
/*
另一种更简单的方法:

insert into dbcc_page(ParentObject,Object,Field,Value)
exec('DBCC page(master,1,1401,3) with tableresults')

*/
insert into dbcc_page(ParentObject,Object,Field,Value)
exec proc_dbcc_page

--6.查看数据
select *
from dbcc_page 

2、DBCC EXTENTINFO

分配的区的信息

语法:

DBCC EXTENTINFO(,[,{indexname|indexid|-1}] [,partitionnumber])

DBCC EXTENTINFO
(
,              --数据库名称,数据库id
         --表名称,表id
[,{indexname|indexid|-1}]   --可选:  索引名称,索引id
[,partitionnumber]          --可选:  分区号
)


实例:

--1.先建表
if OBJECT_ID('test') is not null
   drop table test

CREATE TABLE test(idd INT NOT NULL,name VARCHAR(10) NULL)

INSERT INTO TEST
SELECT 1,'abcdefg'
UNION ALL
SELECT 2,'hijklmn'


--SELECT * FROM TEST

SELECT *
FROM sys.tables 
WHERE name = 'test'


--2.索引id
select name,
       index_id  -- 0
from sys.indexes
where object_id = object_id('test')


--3.显示对象分配的区的信息
DBCC EXTENTINFO(wc,test,0)

DBCC EXTENTINFO(wc)

3、DBCC IND

分配的数据页信息

语法:

02.DBCC ind:  
03.  
04.DBCC IND(  
05.    ['database name'|database id],   
06.    tablename,  
07.    indexid,   
08.    -1 shows all indexes and IAMs, -2 just show IAMs  
09.)  
10.  
11.PageFID: 页所在的文件号  
12.PagePID: 数据所在文件内的页号  
13.IndexID: 在sys.indexes中的index_id,  -1表示所有索引页和IAM页,-2只显示IAM页  
14.PageType:表示页的类型,1是数据页,2是索引页,10是保存页本身的IAM页。  
15.IndexLevel: 是IAM结构的级别。如果0,那么这是索引的叶级别页  

实例:

--1.先建表
if OBJECT_ID('test') is not null
   drop table test

CREATE TABLE test(idd INT NOT NULL,name VARCHAR(10