Trace Flag (TF) 是控制 SQL Server 特定行為的開關,分為 Session Scope、Global Scope。屬於「劍走偏鋒」優化手段,**務必先套用 Best Practice 後再評估使用**。
| 方式 | 指令/位置 | 範圍 | 持久性 |
|---|---|---|---|
| DBCC | DBCC TRACEON(1118, -1) / TRACEOFF / TRACESTATUS | Session (-1=Global) | 服務重啟失效 |
| 啟動參數 | SQL Server 組態管理器 → 啟動參數加 -T1118 -T1224 | Global | 永久 (需重啟) |
| 註冊表 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Parameters 加 SQLArg | Global | 永久 |
注意:部分 TF (如 835) **僅支援啟動參數**,DBCC 無效。
| TF | 功能 | 適用場景 | 參考 |
|---|---|---|---|
| 610 | 最小化記錄 (Minimal Logging) 減少 Log 產生 | 大量載入、索引重建後 Log 仍過大 | MSDN |
| 834 | 使用 Large Page 分配 Buffer Pool | 專用 SQL Server 機器,記憶體 ≥ 64GB | |
| 835 | Standard Edition 啟用 Lock Pages in Memory | 標準版需鎖定記憶體防止分頁 | 需啟動參數 |
| 1118 | TempDB 統一配置 Uniform Extent (避免 SGAM 爭用) | 套用 TempDB 最佳實踐 (多檔案、同大小) 後仍有爭用 | PSS Blog |
| 1204 / 1222 | 死鎖寫入錯誤日誌 (1204=文字, 1222=XML) | 需事後分析死鎖圖 | 配合 sp_readerrorlog |
| 1211 / 1224 | 禁用鎖升級 (1224 記憶體壓力時仍升級) | 特定高並發場景需精細鎖控制 | 1211 優先級較高 |
| 2528 | DBCC CHECKDB 單執行緒 | 大資料庫檢查佔用過多 CPU 時 | |
| 3226 | 成功備份不寫入錯誤日誌 | 高頻 Log Backup (如 5 分鐘) 造成日誌噪音 | |
| 4199 | 啟用所有 Query Optimizer Hotfix | 升級版本後查詢計畫退化,**風險高,需完整回歸測試** | KB 974006 |
| TF | 功能 | 危害 |
|---|---|---|
| 806 | 讀取時邏輯一致性檢查 (Checksum 每頁) | **效能暴跌**,僅供儲存子系統驗證 |
| 818 | 寫入一致性環形緩衝區 | 輕量但仍有額外開銷,測試環境用 |
| 1200 | 詳細鎖資訊輸出 | 輸出量極大,嚴重拖慢系統 |
| 1806 | 停用 Instant File Initialization | 檔案擴展需零填充,造成阻塞 |
| 3502 | Checkpoint 詳細資訊寫入日誌 | 日誌膨脹 |
| 3505 | 停用自動 Checkpoint | **極度危險**,可能導致資料遺失、恢復時間失控 |
Trace Flag 是手術刀而非瑞士刀。**生產僅開啟經驗證的 TF (如 1118、3226、1222)**,其餘嚴禁。持續關注 Microsoft 版本資訊,新版本常將熱門 TF 行為內建為預設 (如 TF 1118 在 SQL 2016+ 預設開啟)。