DBCC PAGE、DBCC LOG、DBCC EXTENTINFO、DBCC IND、DBCC SHOW_STATISTICS、DBCC SHOWCONTIG、DBCC SQLPERF

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



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(<dbname|dbid>,<tabelname|tableid>[,{indexname|indexid|-1}] [,partitionnumber])

DBCC EXTENTINFO
(
<dbname|dbid>,              --数据库名称,数据库id
<tabelname|tableid>         --表名称,表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) 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.创建表
if exists(select * from sys.tables where name = 'dbcc_ind')
   drop table dbcc_ind
go

create table dbcc_ind
(
	PageFID numeric(20),
	PagePID numeric(20),
	
	IAMFID numeric(20),
	IAMPID numeric(20),
	
	ObjectID numeric(20),
	IndexID numeric(20),
	PartitionNumber numeric(20),
	PartitionID numeric(20),
	
	iam_chain_type nvarchar(100),
	
	PageType numeric(20),
	IndexLevel numeric(20),
	
	NextPageFID numeric(20),
	NextPagePID numeric(20),
	PrevPageFID numeric(20),
	PrevPagePID numeric(20)
)
go


--4.建存储过程
if exists(select * from sys.procedures)
   drop procedure proc_dbcc_ind
go

create procedure proc_dbcc_ind
as

dbcc ind(master,test,0) 

go


insert into dbcc_ind
exec proc_dbcc_ind


--5.一共2页,分别是IAM页1402,数据页1401
select PageFID,
       PagePID,
       OBJECTID,
       IndexID,
       PartitionNumber,
       PartitionID,
       iam_chain_type,
       PageType,
       IndexLevel,
       
       NextPageFID,  --下一页的文件id
       NextPagePID,  --下一页的页id
       PrevPageFID,  
       PrevPagePID
from dbcc_ind


 

4、DBCC SHOW_STATISTICS

DBCC SHOW_STATISTICS 显示表或索引视图的当前查询优化统计信息。 查询优化器使用统计信息估计查询结果中的基数或行数,这样,查询优化器可以创建高质量的查询计划。 例如,查询优化器可以使用基数估计在查询计划中选择索引查找运算符而不是索引扫描运算符,从而通过避免消耗大量资源的索引扫描来提高查询性能。

查询优化器将表或索引视图的统计信息存储在统计信息对象中。 对于表,统计信息对象是根据索引或表列的列表创建的。 统计信息对象包含一个带有统计信息的相关元数据的标题、一个带有统计信息对象第一个键列中的值的分布的直方图,以及一个用于度量各列之间的相关性的密度向量。 数据库引擎可以使用统计信息对象中的任何数据计算基数估计。

语法:

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target ) 
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]
< option > :: =
    STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM

table_or_indexed_view_name
要显示其统计信息的表或索引视图的名称。

target
要显示其统计信息的索引、统计信息或列的名称。 
如果 target 是表或索引视图的现有索引或统计信息的名称,则返回有关此目标的统计信息。 
如果 target 是现有列的名称,且此列中存在自动创建的统计信息,则返回有关该自动创建的统计信息的信息。 
如果列目标中不存在自动创建的统计信息,则返回错误消息 2767。

NO_INFOMSGS
取消严重级别从 0 到 10 的所有信息性消息。

STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ ,n ]
如果指定以上一个或多个选项,将根据指定的选项限制该语句返回的结果集。 如果没有指定任何选项,则返回所有统计信息。

STATS_STREAM 为 标识为仅供参考。不提供支持。不保证以后的兼容性。


实例:

dbcc show_statistics
(
'test',   --表的名称
'idd'     --列的名称
)


dbcc show_statistics
(
'test',   --表的名称
'_WA_Sys_00000001_117F9D94'     --统计信息的名称
)

 

5、DBCC SHOWCONTIG

显示指定的表或视图的数据和索引的碎片信息。

后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。

 

语法:

DBCC SHOWCONTIG 
[ ( 
    { table_name | table_id | view_name | view_id } 
    [ , index_name | index_id ] 
) ] 
    [ WITH 
        { 
         [ , [ ALL_INDEXES ] ] 
         [ , [ TABLERESULTS ] ] 
         [ , [ FAST ] ]
         [ , [ ALL_LEVELS ] ] 
         [ NO_INFOMSGS ]
         }
    ]

able_name | table_id | view_name | view_id
要检查碎片信息的表或视图。 如果未指定,则检查当前数据库中的所有表和索引视图。 
若要获得表或视图 ID,请使用 OBJECT_ID 函数。

index_name |index_id
要检查碎片信息的索引。 如果未指定,则该语句将处理指定表或视图的基本索引。 
若要获取索引 ID,请使用 sys.indexes 目录视图。

WITH
指定有关 DBCC 语句返回的信息类型的选项。

FAST
指定是否要对索引执行快速扫描和输出最少信息。 快速扫描不读取索引的叶级或数据级页。

ALL_INDEXES
显示指定表和视图的所有索引的结果,即使指定了特定索引也是如此。

TABLERESULTS
将结果显示为含附加信息的行集。

ALL_LEVELS
仅为保持向后兼容性而保留。 即使指定了 ALL_LEVELS,也只对索引叶级或表数据级进行处理。

NO_INFOMSGS
取消严重级别从 0 到 10 的所有信息性消息。


实例:

dbcc showcontig('test',0)
/*
DBCC SHOWCONTIG 正在扫描 'test' 表...
表: 'test' (293576084);索引 ID: 0,数据库 ID: 7
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1
- 扫描区数..............................: 1
- 区切换次数..............................: 0
- 每个区的平均页数........................: 1.0
- 扫描密度 [最佳计数:实际计数].......: 100.00% [1:1]
- 区扫描碎片 ..................: 0.00%
- 每页的平均可用字节数.....................: 8048.0
- 平均页密度(满).....................: 0.57%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/


 

6、DBCC SQLPERF

提供所有数据库的事务日志空间使用情况统计信息。 也可以用于重置等待和闩锁的统计信息。

 

语法:

DBCC SQLPERF 
(
     [ LOGSPACE ]
     |
          [ "sys.dm_os_latch_stats" , CLEAR ]
     |
     [ "sys.dm_os_wait_stats" , CLEAR ]
) 
     [WITH NO_INFOMSGS ]
     
LOGSPACE
返回事务日志的当前大小和用于每个数据库的日志空间的百分比。 
可以使用此信息来监视事务日志中使用的空间量。

" sys.dm_os_latch_stats" , CLEAR
重置闩锁统计信息。 有关详细信息,请参阅 sys.dm_os_latch_stats (Transact-SQL)。

"sys.dm_os_wait_stats" , CLEAR
重置等待统计信息。 有关详细信息,请参阅 sys.dm_os_wait_stats (Transact-SQL)。

WITH NO_INFOMSGS
取消严重级别从 0 到 10 的所有信息性消息。


实例:

dbcc sqlperf(logspace)
/*
Database Name	Log Size (MB)	Log Space Used (%)	Status
master	10.17188	16.82028	0
tempdb	0.4921875	64.78175	0
model	0.7421875	36.31579	0
msdb	5.054688	20.40186	0
ReportServer	6.242188	18.77347	0
ReportServerTempDB	0.8046875	45.20631	0
wc	0.5546875	93.39789	0
*/

 

7、DBCC LOG

语法:

dbcc log(dbname,4)       --(n=0,1,2,3,4)

0 - 默认选项
1 - 更多信息plus flags, tags, row length
2 - 非常详细的信息plus object name, index name,page id, slot id
3 - 每种操作的全部信息
4 - 每种操作的全部信息加上该事务的16进制信息


实例:

dbcc log(wc,1)

--系统函数
select * from fn_dblog(null,null)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值