一、了解DBCC
 DBCC(database consistenecy checker,简称dbcc) 是一个实用命令集,用来检查数据库的逻辑一致性及物理一致性。
 数据库控制台命令语句可分为以下类别:
 维护: 对数据库、索引或文件组进行维护的任务。
 杂项: 杂项任务,如启用跟踪标志或从内存中删除 DLL。
 信息: 收集并显示各种类型信息的任务。
 验证: 对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作
 

二、DBBCC维护语句:对数据库、索引或文件组进行维护的任务。
 DBCC CLEANTABLE。回收删除的可变长度列和文本列的空间。
  DBCC CLEANTABLE
  (
      { 'database_name' | database_id | 0 }
   , { 'table_name' | table_id | 'view_name' | view_id }
      [ , batch_size ]
  )
  [ WITH NO_INFOMSGS ]
 DBCC INDEXDEFRAG。指定表或视图的索引碎片整理。
  DBCC INDEXDEFRAG
   (
       { 'database_name' | database_id | 0 }
    , { 'table_name' | table_id | 'view_name' | view_id }
    , { 'index_name' | index_id }
    , { partition_number | 0 }
   )
       [ WITH NO_INFOMSGS ]

 DBCC DBREINDEX。 对指定数据库中的表重新生成一个或多个索引。
  DBCC DBREINDEX
  (
   'table_name'
      [ , 'index_name' [ , fillfactor ] ]
  )
      [ WITH NO_INFOMSGS ]

 DBCC SHRINKDATABASE。 收缩指定数据库中的数据文件大小。
  DBCC SHRINKDATABASE
  ( 'database_name' | database_id | 0
       [ ,target_percent ]
       [ , { NOTRUNCATE | TRUNCATEONLY } ]
  )
  [ WITH NO_INFOMSGS ]

 DBCC DROPCLEANBUFFERS。 从缓冲池中删除所有清除缓冲区。DBCC DROPCLEANBUFFERS [ WITH NO_INFOMSGS ]
 DBCC SHRINKFILE。 收缩相关数据库的指定数据文件或日志文件大小。
  DBCC SHRINKFILE
  (
      { 'file_name' | file_id }
      { [ , EMPTYFILE ]
      | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
      }
  )
  [ WITH NO_INFOMSGS ]
 DBCC FREEPROCCACHE。 从过程缓存中删除所有元素。DBCC FREEPROCCACHE [ WITH NO_INFOMSGS ]
 DBCC UPDATEUSAGE 报告目录视图中的页数和行数错误并进行更正。
  DBCC UPDATEUSAGE
    (     { 'database_name' | database_id | 0 }
     [ , { 'table_name' | table_id | 'view_name' | view_id }
     [ , { 'index_name' | index_id } ] ]
    ) [ WITH [ NO_INFOMSGS ] [ , ] [ COUNT_ROWS ]
     ]

三、DBBCC验证语句:对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作。
 DBCC CHECKALLOC。检查指定数据库的磁盘空间分配结构的一致性。
  DBCC CHECKALLOC
  [
  (
       [ 'database_name' | database_id | 0 ]
     [ , NOINDEX
       |
       { REPAIR_ALLOW_DATA_LOSS
       | REPAIR_FAST
       | REPAIR_REBUILD
       } ]
  )
  ]
       [ WITH { [ ALL_ERRORMSGS ]
         [ , NO_INFOMSGS ]
         [ , TABLOCK ]
         [ , ESTIMATEONLY ]
       }
       ]

 DBCC CHECKFILEGROUP。检查当前数据库中指定文件组中的所有表的分配和结构完整性。
  DBCC CHECKFILEGROUP
  [
  (
  [ { 'filegroup_name' | filegroup_id | 0 } ]
  [ , NOINDEX ]
  )
  ]
      [ WITH
   {
       [ ALL_ERRORMSGS ]
       [ NO_INFOMSGS ] ]
       [ , [ TABLOCK ] ]
       [ , [ ESTIMATEONLY ] ]
   }
       ]
 DBCC CHECKCATALOG。检查指定数据库内的目录一致性。数据库必须联机。
  DBCC CHECKCATALOG
  [
   (
   'database_name' | database_id | 0
   )
  ]
      [ WITH NO_INFOMSGS ]

 DBCC CHECKIDENT。 检查指定表的当前标识值,如有必要,则更改标识值。
  DBCC CHECKIDENT
  (
  'table_name'
      [ , {
      NORESEED | { RESEED [ , new_reseed_value ] }
   }
      ]
  )
  [ WITH NO_INFOMSGS ]

 DBCC CHECKCONSTRAINTS。 检查当前数据库中指定表上的指定约束或所有约束的完整性。
  DBCC CHECKCONSTRAINTS
  [
   (
   'table_name' | table_id | 'constraint_name' | constraint_id
   )
  ]
      [ WITH
      { ALL_CONSTRAINTS | ALL_ERRORMSGS } [ , NO_INFOMSGS ]
      ]

 DBCC CHECKTABLE。检查组成表或索引视图的所有页和结构的完整性。
  DBCC CHECKTABLE
  (
   'table_name' | 'view_name'
      [ , NOINDEX
      | index_id
      | { REPAIR_ALLOW_DATA_LOSS
      | REPAIR_FAST
      | REPAIR_REBUILD }
      ]
  )
      [ WITH
   { [ ALL_ERRORMSGS ]
     [ , [ NO_INFOMSGS ] ]
     [ , [ TABLOCK ] ]
     [ , [ ESTIMATEONLY ] ]
     [ , [ PHYSICAL_ONLY ] ]
   }
      ]

 DBCC CHECKDB。检查指定数据库中所有对象的分配、结构和逻辑完整性。
  DBCC CHECKDB
  [
  (
   'database_name' | database_id | 0
      [ , NOINDEX
      | { REPAIR_ALLOW_DATA_LOSS
      | REPAIR_FAST
      | REPAIR_REBUILD
      } ]
  )
  ]
      [ WITH         {
       [ ALL_ERRORMSGS ]
       [ , [ NO_INFOMSGS ] ]
       [ , [ TABLOCK ] ]
       [ , [ ESTIMATEONLY ] ]
       [ , [ PHYSICAL_ONLY ] ] | [ , [ DATA_PURITY ] ]
   }
      ]

四、DBBCC的信息语句

 DBCC SHOW_STATISTICS。显示指定表上的指定目标的当前分发统计信息。
 DBCC INPUTBUFFER.显示从客户端发送到 Microsoft SQL Server 2005 实例的最后一个语句。DBCC INPUTBUFFER ( session_id [ , request_id ] ) [WITH NO_INFOMSGS ]
 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 ]
    }
      ]

 DBCC OPENTDBCC INPUTBUFFERRAN 如果在指定数据库内存在最早的活动事务和最早的分布式和非分布式复制事务,则显示与之有关的信息
  DBCC OPENTRAN
  [
   ( [ 'database_name' | database_id | 0 ] ) ]
      { [ WITH TABLERESULTS ]
        [ , [ NO_INFOMSGS ] ]
      }
  ]
 DBCC SQLPERF.提供有关如何在所有数据库中使用事务日志空间的统计信息。 
  DBCC SQLPERF ( LOGSPACE | 'sys.dm_os_latch_stats' , CLEAR | 'sys.dm_os_wait_stats' , CLEAR )
  [WITH NO_INFOMSGS ]
 DBCC OUTPUTBUFFER.以十六进制和 ASCII 格式返回指定 session_id 的当前输出缓冲区。DBCC OUTPUTBUFFER ( session_id [ , request_id ] )
 DBCC TRACESTATUS.显示跟踪标志的状态.DBCC TRACESTATUS ( [ [ trace# [ ,...n ] ] [ , ] [ -1 ] ] )
 DBCC PROCCACHE.以表格格式显示有关过程缓存的信息。DBCC PROCCACHE [ WITH NO_INFOMSGS ]
 DBCC USEROPTIONS 返回当前连接的活动(设置)的 SET 选项。DBCC USEROPTIONS


五、DBBCC的杂项语句:杂项任务,如启用跟踪标志或从内存中删除 DLL。

 DBCC HELP。返回指定的 DBCC 命令的语法信息。DBCC HELP ( 'dbcc_statement' | @dbcc_statement_var | '?' )[ WITH NO_INFOMSGS ]
 DBCC dllname (FREE)。从内存中上载指定的扩展存储过程 DLL。DBCC dllname ( FREE ) [ WITH NO_INFOMSGS ]
 DBCC DBREPAIR 。禁用指定的跟踪标记。DBCC TRACEOFF ( trace# [ ,...n ] [ , -1 ] ) [ WITH NO_INFOMSGS ]
 DBCC TRACEON。启用指定的跟踪标记。DBCC TRACEON ( trace# [ ,...n ][ , -1 ] ) [ WITH NO_INFOMSGS ]

六、未公开的DBCC
  DBCC CacheStats :显示存在于当前 buffer Cache 中的对象的信息,例如 :hit rates,编译的对象和执行计划

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

原文地址:http://www.cnblogs.com/yizhu2000/archive/2007/11/01/945972.html