【MSDN】 SqlServer DBCC解析
汇总学习下SqlServer的DBCC指令。
DBCC:Transact-SQL 编程语言提供 DBCC 语句以作为 SQL Server 的数据库控制台命令。
数据库控制台命令语句可分为以下类别。
命令类别 | 执行 |
维护 | 对数据库、索引或文件组进行维护的任务。 |
杂项 | 杂项任务,如启用跟踪标志或从内存中删除 DLL。 |
信息 | 收集并显示各种类型信息的任务。 |
验证 | 对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作。 |
三、信息语句:
1、DBCC INPUTBUFFER (返回会话ID最后一次执行的Sql语句)
语法:DBCC INPUTBUFFER ( session_id [ , request_id ])[WITH NO_INFOMSGS ]
参数:
session_id 与各活动主连接关联的会话 ID。
request_id 要在当前会话中精确搜索的请求(批)。
下面的查询返回 request_id:
SELECT request_id
FROM sys.dm_exec_requests
WHERE session_id = @@spid;
WITH
启用要指定的选项。
NO_INFOMSGS
取消严重级别从 0 到 10 的所有信息性消息。
结果集:
列名 | 数据类型 | 说明 |
EventType | nvarchar(30) | 事件类型。 这可能是 RPC 事件或 Language 事件。 检测不到上一个事件时,输出为 No Event。 |
参数 | smallint |
0 = 文本 1- n = Parameters |
EventInfo | nvarchar(4000) | 对于 RPC 的 EventType,EventInfo 仅包含过程名。 对于 Language 的 EventType,仅显示事件的前 4000 个字符。 |
示例:
我们在@@spid=55的窗口敲入Sql代码。
结果输出了我们执行的Sql语句。
2、DBCC SHOWCONTIG(返回索引相关信息)
语法:
DBCC SHOWCONTIG [ ( { table_name | table_id | view_name | view_id } [ , index_name | index_id ] ) ] [ WITH { [ , [ ALL_INDEXES ] ] [ , [ TABLERESULTS ] ] [ , [ FAST ] ] [ , [ ALL_LEVELS ] ] [ NO_INFOMSGS ] } ]
参数:
table_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 的所有信息性消息。
结果集:
统计信息 | 说明 |
扫描页数(Pages Scanned) | 表或索引中的页数。 |
扫描区数(Extents Scanned) | 表或索引中的区数。 |
区切换次数(Extent Switches) | 遍历表或索引的页时,DBCC 语句从一个区移动到另一个区的次数。 |
Avg. 平均页数(Avg. Pages per Extent) | 页链中每个区的页数。 |
扫描密度 [最佳计数:实际计数](Scan Density [Best Count:Actual Count]) |
百分比。 这是“最佳计数”与“实际计数”的比率。 如果所有内容都是连续的,则该值为 100;如果该值小于 100,则存在一些碎片。 “最佳计数”是指在一切都连续链接的情况下,区更改的理想数目。 “实际计数”是指区更改的实际次数。 |
逻辑扫描碎片(Logical Scan Fragmentation) | 扫描索引的叶级页时返回的出错页的百分比。 此数与堆无关。 对于出错页,分配给索引的下一个物理页不是由当前叶级页中的“下一页”指针所指向的页。 |
区扫描碎片(Extent Scan Fragmentation) | 扫描索引的叶级页时出错区所占的百分比。 此数与堆无关。 对于出错区,包含当前索引页的区在物理上不是包含上一个索引页的区的下一个区。 |
Avg. 平均可用字节数(Avg. Bytes Free per Page) | 扫描的页上平均可用字节数。 此数字越大,则页的填充程度越低。 如果索引不会有很多随机插入,则数字越小越好。 此数字还受行大小影响:行越大,此数字就越大。 |
Avg. 平均密度(全部)(Avg. Page Density (full)) | 页的平均密度,以百分比表示。 该值会考虑行大小。 因此,该值可以更准确地指示页的填充程度。 百分比越大越好。 |
示例:
一些其他用法没有罗列出来,感兴趣的朋友自行查看MSDN,传送门:https://msdn.microsoft.com/zh-cn/library/ms175008(v=sql.120).aspx
3、DBCC OPENTRAN(返回数据库中未提交的事务详情)
语法:
DBCC OPENTRAN
[
( [ database_name | database_id | 0 ] ) ]
{ [ WITH TABLERESULTS ]
[ , [ NO_INFOMSGS ] ]
}
]
参数:
database_name | database_id| 0:显示其中的最早事务信息的数据库名称或 ID。 如果未指定,或者指定为 0,则使用当前数据库。 数据库名称必须符合标识符规则。=
TABLERESULTS:以表格格式指定结果以便可以加载到表中。 使用此选项创建结果表,可以将该结果表插入到表中以进行比较。 未指定此选项时,对结果进行格式化以增加可读性。
NO_INFOMSGS:取消显示所有信息性消息。
示例:
系统中没有未提交的事务,执行DBCC OPENTRAN时,返回下面提醒。
No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
我们创建一个未提交事务,然后执行DBCC OPENTRAN
CREATE TABLE T1(Col1 int, Col2 char(3)); GO BEGIN TRAN INSERT INTO T1 VALUES (101, 'abc'); GO DBCC OPENTRAN; ROLLBACK TRAN; GO DROP TABLE T1; GO
4、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 的所有信息性消息。
结果集:
列名 | 定义 |
Database Name | 数据库名称,为该数据库显示日志统计信息。 |
Log Size (MB) | 分配给日志的当前大小。 该值始终小于最初为日志空间分配的量,因为数据库引擎会保留一小部分磁盘空间,用以存放内部标头信息。 |
Log Space Used (%) | 事务日志信息当前所占用的日志文件的百分比。 |
状态 | 日志文件的状态。 始终为 0。 |
示例:
5、DBCC OUTPUTBUFFER(以十六进制和 ASCII 格式返回指定 session_id 的当前输出缓冲区)
语法:
DBCC OUTPUTBUFFER ( session_id [ , request_id ])
[ WITH NO_INFOMSGS ]
参数:
session_id:与各活动主连接关联的会话 ID。
request_id:要在当前会话中搜索的精确请求(批)。
下面的查询返回 request_id:SELECT request_id FROM sys.dm_exec_requests WHERE session_id = @@spid;
WITH:允许指定其他选项。
NO_INFOMSGS:取消严重级别从 0 到 10 的所有信息性消息。
示例:
6、DBCC TRACESTATUS(显示跟踪标志的状态)
语法:
DBCC TRACESTATUS ( [ [ trace# [ ,...n ] ] [ , ] [ -1 ] ] )
[ WITH NO_INFOMSGS ]
参数:
trace#:将要显示其状态的跟踪标志的编号。 如果未指定 trace# 和 -1,则显示针对会话启用的所有跟踪标志。
n:表示可指定多个跟踪标志的占位符。
-1:显示全局启用的跟踪标志的状态。 如果指定 -1 而未指定 trace#,则显示所有启用的全局跟踪标志。
WITH NO_INFOMSGS:取消显示严重级别从 0 到 10 的所有信息性消息。
结果集:
列名 | 说明 |
TraceFlag | 跟踪标志的名称 |
状态 |
表示跟踪标志是设置为 ON 还是 OFF,是全局启用的还是针对会话启用的。 1 = ON 0 = OFF |
Global |
表示跟踪标志是否是全局设置的 1 = True 0 = False |
Session |
表示跟踪标志是否是针对会话设置的 1 = True 0 = False |
示例:
7、