一些文档中没有介绍的SQL Server DBCC命令
这篇论坛文章(赛迪网技术社区)主要介绍了一些特别有用但文档中没有介绍的sql server DBCC命令,详细内容请参考下文: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
以下是一些sql server的DBCC命令,可以在优化 sql server时使用。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
◆1.DBCC CacheStats :显示存在于当前 buffer Cache 中的对象的信息,例如 :hit rates,编译的对象和执行计划 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
例: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC CACHESTATS ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
执行结果(缩略) ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Object Name Hit Ratio ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
------------ ------------- ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Proc 0.86420054765378507 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Prepared 0.99988494930394334 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Adhoc 0.93237136647793051 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
ReplProc 0.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Trigger 0.99843452831887947 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Cursor 0.42319205924058612 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Exec Cxt 0.65279111666076906 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
View 0.95740334726893905 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Default 0.60895011346896522 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
UsrTab 0.94985969576133511 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
SysTab 0.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Check 0.67021276595744683 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Rule 0.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Summary 0.80056155581812771 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
从这个命令可以得到一些关键的统计信息: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Hit Ratio:显示特定对象可以在sql server的缓存中被命中的百分比,这个数值越大,越好 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Object Count:显示特定类型的对象在sql server的缓存中被命中的总数 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Avg.Cost:sql server用于测量编译一个执行计划所需的时间,以及这个计划所需的内存。根据这个值,可以决定执行计划是否应该加载在缓存中。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Avg.Pages:测量在缓存中的对象使用8K页的平均总数 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
LW Ojbect Count,LW Avg Cost,WL Avg Stay,LW Ave Use:这些列的值表明有多少特定的对象已经被写进程从缓存总移走。这些数值越低,越好。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
◆2.DBCC DROPCLEANBUFFERS:从缓冲池中删除所有,清除缓冲区。在进行测试时,使用这个命令可以从sql server’s的数据缓存data cache(buffer)清除所有的测试数据,以保证测试的公正性。需要注意的是这个命令只移走干净的缓存,不移走脏缓存。由于这个原因,在执行这个命令前,应该先执行CheckPoint,将所有脏的缓存写入磁盘,这样在运行DBCC RROPCLEANBUFFERS 时,可以保证所有的数据缓存被清理,而不是其中的一部分。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
◆3.DBCC ErrorLog :如果很少重起mssqlserver服务,那么服务器的日志会增长得很快,而且打开和查看日志的速度也会很慢。使用这个命令,可以截断当前的服务器日志,主要是生成一个新的日志。可以考虑设置一个调度任务,每周执行这个命令自动截断服务器日志。使用存储过程sp_cycle_errorlog也可以达到同样的目的。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
◆4.DBCC FLUSHPROCINDB:用于清理一个数据库实例中指定数据库的存储过程使用的缓存。数据库的ID是必输参数。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
在测试时保证以前的存储过程计划不会对测试结果造成负面影响,可以使用这个存储过程。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
例子: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DECLARE @intDBID INTEGER SET @intDBID = (SELECT dbid FROM master.dbo.sysdatabases WHERE name = 'database_name') ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC FLUSHPROCINDB (@intDBID) ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
◆5.DBCC FREEPROCCACHE:用于清理所有数据库的过程高速缓存。例如,释放过程高速缓存将导致重新编译某些部分(例如特别 SQL 语句),而不是从高速缓存中对其再使用。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
◆6.DBCC MEMORYSTATUS:列出一个详细分类,分类中显示sql server缓存如何分配,包括缓存的活动。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
◆7.DBCC PAGE:用于查看sql server 中一个数据页的内容 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
例: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC PAGE((dbid|dbname),pagenum [,Print Option][,cache][,logical]) ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
参数说明: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Dbid or dbname :可以是数据库ID或数据库名。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
PageNum:要检查的页号 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Print option:(可选)打印选项的值是:0,1,2。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
0-(缺省)显示页的头信息 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
1- 显示页的头信息,页中每行的信息以及页的偏移表。逐行显示页中的行。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
2- 与选项1相同,除了不是逐行显示页行,而是显示一个单个的信息块。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Cache:(可选)该参数的值是1或0, ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
0- 命令直接从磁盘查找页号而不是检查页号是否在高速缓存中DBCC PAGE ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
1- 若页在高速缓存中,优先从高速缓存中获取页,而不是直接从磁盘中获取页 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Logical:(可选)该参数用于页号是从虚拟页中获取还是逻辑页中获取。这个参数的值可以是1或0, ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
0- 一个虚拟页号 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
1- 一个逻辑页号 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
◆8.DBCC SQLMGRSTATS:用于产生3个不同的值,这些值用在你想查看高速缓存在ad-hoc和预编译的TSQL语句中是如何工作的。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
例: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC SQLMGRSTATS ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
结果: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Item Status ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
------------------------- ----------- ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Memory Used (8k Pages) 5446 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Number CSql Objects 29098 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Number False Hits 425490 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
其中: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Memor Used(8K Pages):若内存页的数量非常大,这也许是个提示:表明一些用户连接正在预处理许多TSQL语句。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Number CSql Objects:表明已经在高速缓存中的TSQL的语句的总数 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Number False Hits:有时,当sql server在匹配在高速缓存中已经存在的TSQL语句时会出现错误的命中。在理想的情况下,这个数字应该尽可能地小。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
◆9.DBCC SQLPERF():这个命令包括了那些有文档说明和没有说明的选项。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC SQLPERF ( LOGSPACE ) ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
提供有关所有数据库中的事务日志空间使用情况的统计信息。具体说明可参考联机帮助。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC SQLPERF(UMSSTATS):提供有关sql server 线程管理情况的统计信息 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
运行这个命令,结果如下: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Statistic Value ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
-------------------------------- ------------------------ ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Scheduler ID 0.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
num users 17.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
num runnable 0.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
num workers 13.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
idle workers 6.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
work queued 0.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
cntxt switches 76752.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
cntxt switches(idle) 47139.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Scheduler Switches 0.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Total Work 54056.0 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
以下是一些关键统计信息的解释: ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Scheduler ID:每个CPU对应一个调度程序,这是调度程序的序号 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Num user:目前在调度队列中的SQL Server线程数目 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Num runnable: 目前正在运行的SQL Server线程数目 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Num Workers:线程池的大小 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Idle workers:正在空闲的workers。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
Cntxt switches:在可执行的线程之间交换上下文的数目 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC SQLPERF(WAITSTATS):提供有关sql server read-ahead activity的信息 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC SQLOERF(IOSTATS):提供主要的SQL server读和写的信息 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC SQLPERF(RASTATS):提供SQL server read-ahead 活动的信息 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
DBCC SQLPERF (THREADS):提供每个sql server线程的I/O,CPU及内存使用情况的信息。 ?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À
(责任编辑:卢兆林)?Ú×ÓÐd÷:_Äforum.entlib.net.cnA&àØ¹¸ À