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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM