追蹤旗標 是控制 SQL Server 內部行為的特殊開關。對 DBA 而言,掌握關鍵 Trace Flag 是進階調優的必要技能。本文系統整理啟用方式、生產環境適用旗標、危險旗標與實務建議。
-- 啟用全域旗標 2203
DBCC TRACEON (2203, -1); -- -1 = Global Scope
-- 停用工作階段旗標 2203
DBCC TRACEOFF (2203, 1); -- 1 = Session Scope (預設)
-- 查看目前啟用狀態
DBCC TRACESTATUS;
-T2203;-T834;-T1118 (每個旗標前綴 -T,分號分隔)-- 建立啟動程序
CREATE PROCEDURE dbo.StartupTraceFlags
AS
BEGIN
DBCC TRACEON (2203, -1); -- 全域旗標
DBCC TRACEON (1118, -1);
END;
GO
-- 設為啟動自動執行
EXEC sp_procoption @ProcName = 'StartupTraceFlags', @OptionName = 'startup', @OptionValue = 'on';
注意:部分旗標 (如 835) 只能 透過啟動參數指定,DBCC 無效。
| 旗標 | 功能 | 適用場景與注意事項 |
|---|---|---|
| 610 | 減少最小記錄操作的日誌產生量 | 已套用基本日誌最佳實踐 (單一 LDF、適當 VLF、獨立磁碟) 仍無法緩解日誌增長時考慮。 參考:MSDN 最小記錄 |
| 834 | 使用 Windows 大頁面 緩衝集區配置 | 專用 SQL Server 伺服器建議啟用,減少頁表項目、提升記憶體存取效率 |
| 835 | 標準版啟用「鎖定記憶體頁面」 | 效果等同群組原則「Lock Pages in Memory」,但允許標準版使用。僅能透過啟動參數 -T835 指定 |
| 1118 | TempDB 統一配置整區 而非混合區 | 減少 SGAM/PFS 頁面爭用。套用 TempDB 最佳實踐 (多資料檔、同樣大小、Trace Flag 1118) 後仍有爭用才考慮。 參考:PSSQL Blog |
| 1204 / 1222 | 死鎖資訊寫入錯誤日誌 | 1204=文字格式,1222=XML 格式 (建議)。配合 sp_readerrorlog 分析死鎖圖譜 |
| 1211 / 1224 | 停用鎖升級 | 1211=完全停用;1224=記憶體壓力時仍允許升級 (較安全)。兩者同時啟用 1211 優先 |
| 2528 | 停用 DBCC CHECKDB/FILEGROUP/TABLE 平行執行 | 強制單執行緒,耗時較長但可避免特定平行掃描問題 |
| 3226 | 不記錄成功備份到錯誤日誌 | 高頻率日誌備份 (如每 5 分鐘) 產生大量噪音時啟用 |
| 4199 | 啟用所有查詢優化器 Hotfix 行為 | 高風險:可能導致計劃退化。需詳細測試。參考 KB 974006 |
| 旗標 | 功能 | 危害 |
|---|---|---|
| 806 | 讀取時執行頁邏輯一致性檢查 | 極大降低效能,僅供儲存子系統測試 |
| 818 | 寫入一致性檢查 (環形緩衝區追蹤最近 2048 次成功寫入) | 效能影響可忽略,但屬診斷用途,非常駐啟用 |
| 1200 | 輸出完整鎖運作過程 | 學習/除錯專用,大量輸出嚴重影響效能 |
| 1806 | 停用瞬間檔案初始化 | 所有空間配置歸零初始化,導致擴充檔案嚴重阻塞 |
| 3502 | 記錄 Checkpoint 詳細資訊 | 錯誤日誌暴增 |
| 3505 | 停用自動 Checkpoint | 極度危險:可能導致資料遺失、恢復時間暴增 |
-- 查看全域與工作階段旗標
DBCC TRACESTATUS (-1); -- 全域
DBCC TRACESTATUS; -- 目前工作階段
-- 查看特定旗標
DBCC TRACESTATUS (1118, -1);