【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问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
随机推荐
- opencv.js小案例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 也谈ObjectARX多版本批量编译
也谈ObjectARX多版本批量编译 by edata 2017-12-10 因某些原因,我的电脑系统依旧是windows XP,所以能安装的vs最高版本是vs2010,以下均在vs2010上实现,其 ...
- Sql Server两个数据库中有一张表的结构一样,怎么快速将一张表中的数据复制到另一个表中
1,下面这句会把表2数据删除,然后把表1复制到表一,两表内容一样 SELECT * into 表2 FROM 表1 2,这句只追加,不删除表2的数据 insert into 表1 select * f ...
- C# 精准计时之 QueryPerformanceCounter QueryPerformanceFrequency用法
C# 用法: public static class QueryPerformanceMethd { [DllImport("kernel32.dll")] public exte ...
- 通用动态树(Link-Cut Tree)模板
一个没有维护任何东西的动态树模板 忘了怎么写可以直接来粘 int ch[300010][2], fa[300010], st[300010]; bool lazy[300010]; bool nroo ...
- 【算法笔记】B1001 害死人不偿命的(3n+1)猜想
1001 害死人不偿命的(3n+1)猜想 (15 分)卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍 ...
- 洛谷 P2518 [HAOI2010]计数 (组合数)
题面 luogu 题解 本来想练数位dp的,结果又忍不住写了组合数.. 去掉一个\(0\)可以看作把\(0\)移到前面去 那么题目转化为 \(n\)有多少个排列小于\(n\) 强制某一位比\(n\)的 ...
- 1152 Google Recruitment (20 分)
In July 2004, Google posted on a giant billboard along Highway 101 in Silicon Valley (shown in the p ...
- hadoop 配置安装
1. 下载hadoop 压缩包, 拷贝到 /usr/hadoop目录下 tar -zxvf hadoop-2.7.1.tar.gz, 比如: 127.0.0.1 localhost 19 ...
- 从源码角度深入分析 ant
[转自] http://www.tuicool.com/articles/eQvIRbA Ant的基本概念 首先是ant的基本概念: Project,Target,Tasks,Properties,P ...