天天看點

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​​
  • ​​DBCC CHECKALLOC​​
  • ​​DBCC CHECKCATALOG​​
  • ​​DBCC CHECKTABLE​​

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

2,檢查限制的完整性

  • ​​DBCC CHECKCONSTRAINTS​​

3,檢查檔案的完整型

  • ​​DBCC CHECKFILEGROUP​​

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​​
  • ​​DBCC TRACEOFF​​
  • ​​DBCC TRACEON​​

檢視追蹤狀态

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用法
下一篇: DBCC維護語句