【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、
【MSDN】 SqlServer DBCC解析的更多相关文章
- SQLSERVER DBCC命令大全
DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区 在进行测试时,使用这个命令可以从SQLSERVER的数据缓存data cache(buffer)清除所有的测试数据,以保 ...
- 【SqlServer】解析SqlServer中的事务
目录结构: contents structure [+] 事务是什么 控制事务 数据并发访问产生的影响 事务的隔离级别 锁 NOLOCK.HOLDLOCK.UPDLOCK 死锁分析 在这篇Blog中, ...
- [转]在SqlServer 中解析JSON数据
在Sqlserver中可以直接处理Xml格式的数据,但因为项目需要所以要保存JSON格式的数据到Sqlserver中在博客:Consuming JSON Strings in SQL Server ...
- SqlServer 2005升级至SqlServer 2008 解析Json 字符集问题
如果你数据库是通过sqlserver 2008以上版本创建的请绕过: 客户以前用的是sqlserver2005 创建的数据库.后来升级到 sqlserver 2008 . 有个业务用到了json查询 ...
- 【SqlServer】解析SqlServer的分页
方式1: 假设页数是10,现在要拿出第5页的内容,查询语句如下: --10代表分页的大小 * from test where id not in ( --40是这么计算出来的:10*(5-1) id ...
- 在SqlServer 中解析JSON数据 [parseJSON] 函数 数据库中 解析JSON
使用如下: SELECT * FROM parseJSON('{ "联系人": { "姓名": "huang", "网名" ...
- SQLSERVER SQL性能优化
1.选择最有效率的表名顺序(只在基于规则的优化器中有效) SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving ta ...
- SQLSERVER SQL性能优化技巧
这篇文章主要介绍了SQLSERVER SQL性能优化技巧,需要的朋友可以参考下 1.选择最有效率的表名顺序(只在基于规则的优化器中有效) SQLSERVER的解析器按照从右到左的顺序处理F ...
- 在论坛中出现的比较难的sql问题:18(字符合并 整数解析星期几)
原文:在论坛中出现的比较难的sql问题:18(字符合并 整数解析星期几) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
随机推荐
- 趣图:后端工程师是怎样调试CSS的
一大波趣图:CSS的力量 趣图:前端 VS 后端
- loj #2255. 「SNOI2017」炸弹
#2255. 「SNOI2017」炸弹 题目描述 在一条直线上有 NNN 个炸弹,每个炸弹的坐标是 XiX_iXi,爆炸半径是 RiR_iRi,当一个炸弹爆炸时,如果另一个炸弹所在位置 X ...
- 洛谷P3122 [USACO15FEB]圈住牛Fencing the Herd(计算几何+CDQ分治)
题面 传送门 题解 题目转化一下就是所有点都在直线\(Ax+By-C=0\)的同一侧,也就可以看做所有点代入\(Ax+By-C\)之后的值符号相同,我们只要维护每一个点代入直线之后的最大值和最小值,看 ...
- MATLAB版本(2012b 64bit),在尝试调用svmtrain函数时报错
问题:MATLAB版本(2012b 64bit),在尝试调用svmtrain函数时报错: 解决方案:参照https://blog.csdn.net/TIME_LEAF/article/details/ ...
- gym 102082B dp
和51nod1055 一样: #include<iostream> #include<cstdio> #include<algorithm> #include< ...
- 5、C++结构体的使用
5.结构体定义 结构体是用户带定义的类型,而结构声明定义了这种类型的数据属性.定义了类型后,便可以创建这种类型的变量,因此创建结构包括两步.首先,定义结构描述——它描述并标记了能够存储在结构中的各种数 ...
- xz
- C++_友元2-友元成员函数
接着上一篇<友元是什么>中,我们发现Remote友元类的大多数方法都是用Tv类的公有接口实现.这意味着这些方法并不是真正需要友元. 事实上唯一直接访问Tv成员的Remote方法是Remot ...
- POJ_3069 Saruman's Army 【贪心】
一.题面 POJ3069 二.题意分析 我的理解是,可以在每个点设置一个监测点,能够监测到范围R内的所有其他点,那么问给出N个点的一维位置,需要在其中挑多少个监测点把所有点都监测到. 贪心解决: 1. ...
- 关于去掉输入一定数字n,在n后写入n个字符串的问题
在输入数字n后要用一个getchar 去吃掉数字n后面跟着的回车符号,从而保证输入的字符串数是和n是保持一致的 具体实例代码如下: #include<stdio.h> #include&l ...