DBCC (Database Console Commands) 是 SQL Server 內建的診斷、維護、驗證指令集,涵蓋資料庫完整性檢查、索引碎片整理、快取管理、追蹤旗標等核心運維功能。精通 DBCC 是 DBA 進階的必經之路。
| 分類 | 代表命令 | 核心用途 |
|---|---|---|
| 完整性檢查 | CHECKDB, CHECKTABLE, CHECKALLOC, CHECKCATALOG, CHECKIDENT, CHECKCONSTRAINTS | 資料/索引/配置/目錄/身分/約束一致性驗證 |
| 索引維護 | INDEXDEFRAG, DBREINDEX, SHOWCONTIG | 碎片整理、重建、掃描密度分析(新版建議 ALTER INDEX REBUILD/REORGANIZE) |
| 快取與記憶體 | FREEPROCCACHE, FREESESSIONCACHE, FREESYSTEMCACHE, DROPCLEANBUFFERS | 計畫快取/會話快取/系統快取/資料緩衝區清理 |
| 交易記錄 | LOGINFO, SQLPERF(LOGSPACE), SHRINKFILE, SHRINKDATABASE | VLF 檢視、記錄空間使用、收縮檔案/資料庫 |
| 追蹤與除錯 | TRACEON, TRACEOFF, TRACESTATUS, INPUTBUFFER, OUTPUTBUFFER | 追蹤旗標啟用/停用/狀態、輸入/輸出緩衝區檢視 |
| 資訊查詢 | HELP, USEROPTIONS, SHOW_STATISTICS, PAGE, DBINFO, FILEHEADER | 命令說明、會話選項、統計資料、頁面結構、資料庫/檔案頭資訊 |
| 其他維護 | PINTABLE, UNPINTABLE, UPDATEUSAGE, CLEANTABLE | 資料表釘住/釋放、空間使用修正、清理變長欄位空間 |
DBCC CHECKDB ('DatabaseName') [WITH NO_INFOMSGS, ALL_ERRORMSGS, DATA_PURITY, EXTENDED_LOGICAL_CHECKS]
NO_INFOMSGS:抑制資訊訊息,僅顯示錯誤ALL_ERRORMSGS:顯示所有錯誤(預設前 200 筆)DATA_PURITY:驗證資料值是否符合型別定義(SQL 2005+ 預設開啟)EXTENDED_LOGICAL_CHECKS:索引檢視、XML 索引、空間索引邏輯一致性-- 舊版
DBCC SHOWCONTIG ('TableName', 'IndexName') WITH FAST, TABLERESULTS
-- 新版推薦 (SQL 2005+)
SELECT * FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID('TableName'), NULL, NULL, 'DETAILED')
關鍵指標:avg_fragmentation_in_percent > 30% → REBUILD;5-30% → REORGANIZE;page_density / avg_page_space_used_in_percent 評估填充因子效果。
DBCC SHRINKFILE (logical_name, target_size_MB) -- 檔案層級精準控制
DBCC SHRINKDATABASE (db_name, target_percent) -- 資料庫層級
DBCC FREEPROCCACHE [ (plan_handle) ] -- 特定計畫或全部
慎用於生產高峰期,會導致後續查詢重新編譯風暴。針對性解決參數嗅探問題優於全域清理。
| 旗標 | 功能 | 適用場景 |
|---|---|---|
| 1204 / 1222 | 死鎖圖輸出至錯誤記錄 | 死鎖分析 |
| 3605 | DBCC 輸出導向錯誤記錄 | 自動化腳本擷取輸出 |
| 8602 | 忽略索引提示 | 測試最佳化器原生選擇 |
| 4199 | 啟用查詢最佳化器修正 (SQL 2014+) | 效能回歸排查 |
DBCC 是 DBA 的「聽診器」與「手術刀」。定期 CHECKDB 守護資料完整性、碎片監控指導索引維護、謹慎收縮避免副作用、善用追蹤旗標深度診斷。建立標準化 DBCC 作業手冊,納入自動化排程與告警,是成熟運維體系的標誌。