DBCC 简介

DBCC是SQL Server的数据库控制台命令(Database Console Command)的简写,主要分为维护、信息、验证和其他共四类。

一,维护

DBCC 可以回收空间、收缩数据库,更新系统视图中的页面数量和行数量。

1,回收空间

从表或索引视图中的被删除的可变长度列(variable-length column)中回收空间,该命令不会从已被删除的固定长度的列(fix-length column)中回收空间。

DBCC CLEANTABLE  
(  
    { database_name | database_id | 0 }  
    , { table_name | table_id | view_name | view_id }  
    [ , batch_size ]  
)  
[ WITH NO_INFOMSGS ] 

batch_size是指每个事务处理的数据行数量,默认值是0,表示在一个事务中处理整个表。

2,数据库收缩

DBCC SHRINKDATABASE,用于收缩数据库的数据文件和日志文件, DBCC SHRINKFILE,用于收缩数据库中指定的单个文件,或者清空单个文件。

DBCC SHRINKDATABASE   
( database_name | database_id | 0   
     [ , target_percent ]   
     [ , { NOTRUNCATE | TRUNCATEONLY } ]   
)  
[ WITH NO_INFOMSGS ] 

DBCC SHRINKFILE   
(  
    { file_name | file_id }   
    { [ , EMPTYFILE ]   
    | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]  
    }  
)  
[ WITH NO_INFOMSGS ] 

3,更新视图中的页面数量和行数量

该命令用于校正表或索引中每个分区的行、已用页,保留页,叶级页和数据页的数量,使得 sp_spaceused  等系统存储过程或视图返回的结果更精确。

DBCC UPDATEUSAGE   
(   { database_name | database_id | 0 }   
    [ , { table_name | table_id | view_name | view_id }   
    [ , { index_name | index_id } ] ]   
) [ WITH [ NO_INFOMSGS ] [ , ] [ COUNT_ROWS ] ] 

二,信息

信息类DBCC主要输出信息。

1,查看最新的语句

显示从客户端发送到Microsoft SQL Server实例的最后一条语句。

DBCC INPUTBUFFER ( session_id [ , request_id ])  
[WITH NO_INFOMSGS ] 

2,查看活跃事务

DBCC OPENTRAN   
[   
    ( [ database_name | database_id | 0 ] )   
    { [ WITH TABLERESULTS ]  
      [ , [ NO_INFOMSGS ] ]  
    }  
] 

3,查看日志空间,重置wait和latch的统计

DBCC SQLPERF   
(  
     [ LOGSPACE ]  
     | [ "sys.dm_os_latch_stats" , CLEAR ]  
     | [ "sys.dm_os_wait_stats" , CLEAR ]  
)   
[WITH NO_INFOMSGS ] 

4,查看当前连接的SET选项

DBCC USEROPTIONS  [ WITH NO_INFOMSGS ] 

5,查看表或索引视图的统计信息

DBCC SHOW_STATISTICS  用于显示表或索引视图的统计信息,查询优化器使用统计信息来评估查询结果的大小和基数。

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )   
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]  
< option > :: =  STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM  

三,验证

验证类DBCC 主要用于检查数据的完整性、约束的完整性、文件的完整性,并可以查看和设置ID列的值。

1,检查数据的完整性

DBCC CHECKDB 的用法,可以参考《Could not continue scan with NOLOCK due to data movement

2,检查约束的完整性

3,检查文件的完整型

4,查看当前表的ID值

DBCC CHECKIDENT,用于查看当前表的ID值,或者为当前表设置一个新的ID值(即重置ID种子值)

DBCC CHECKIDENT ( table_name   [, { NORESEED | { RESEED [, new_reseed_value ] } } ]  )  
[ WITH NO_INFOMSGS ] 

四,追踪(TRACE)

打开Trace,关闭trace,查看trace的状态:

查看追踪状态

DBCC TRACESTATUS ( [ [ trace# [ ,...n ] ] [ , ] [ -1 ] ] )   
[ WITH NO_INFOMSGS ] 

五,碎片

SQL Server按照特定的顺序来存储数据,如果数据叶被移动或拆分,会导致碎片的产生。

1,显示表或索引的碎片信息

该命令将被移除,推荐使用  sys.dm_db_index_physical_stats 替换。

DBCC SHOWCONTIG   
[ (   
    { table_name | table_id | view_name | view_id }   
    [ , index_name | index_id ]   
) ]   
    [ WITH   
        {   
         [ , [ ALL_INDEXES ] ]   
         [ , [ TABLERESULTS ] ]   
         [ , [ FAST ] ]  
         [ , [ ALL_LEVELS ] ]   
         [ NO_INFOMSGS ]  
         }  
    ] 

2,索引碎片的重组和重建

DBCC INDEXDEFRAG   用于索引碎片的重组,该命令将被移除,推荐使用 ALTER INDEX  REORGANIZE 替代

DBCC DBREINDEX  用于索引碎片的重建,该命令将被移除,推荐使用 ALTER INDEX  REBUILD替代

六,缓存

SQL Server的缓存池分为数据缓存和计划缓存,数据缓存用于存储数据,而计划缓存用于存储执行计划等信息。

1,查看过程缓存(plan cache)

DBCC PROCCACHE [ WITH NO_INFOMSGS ] 

2,移除缓存

DBCC DROPCLEANBUFFERS 用于移除缓存池中的clean buffer,为了删除clean buffer,首先调用CHECKPOINT,把所有的脏数据页写回到硬盘中,此时的缓存不存在任何脏数据库,称作 clean buffer。

DBCC FREEPROCCACHE 用于移除缓存池中的plan cache,或者移除资源池中的缓存项目。

DBCC FREESYSTEMCACHE 从所有缓存中移除没有使用的缓存项目(unused cache entries),SQL Server在后台会自动清空未使用的缓存项目,也可以手动指定命令从每个缓存或Resource Governor的资源池中移除未使用的项目。

DBCC DROPCLEANBUFFERS [ WITH NO_INFOMSGS ]  

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]  

DBCC FREESYSTEMCACHE ( 'ALL' [, pool_name ] )   
    [WITH  { [ MARK_IN_USE_FOR_REMOVAL ] , [ NO_INFOMSGS ]  } ]  

pool_name 是Resource Governor的资源池名称,可以从 sys.dm_resource_governor_resource_pools  获得资源池名称。

3,移除其他缓存

DBCC FLUSHAUTHCACHE : 移除数据验证缓存,清空login和firewall 规则

DBCC FREESESSIONCACHE: 清空分布式查询的连接缓存

 

参考文档:

DBCC (Transact-SQL)

posted @ 2020-07-02 09:09  悦光阴  阅读(1313)  评论(0编辑  收藏  举报