首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 追蹤旗標 完整指南:控制伺服器行為的隱藏開關

     編輯:關於SqlServer

追蹤旗標 是控制 SQL Server 內部行為的特殊開關。對 DBA 而言,掌握關鍵 Trace Flag 是進階調優的必要技能。本文系統整理啟用方式、生產環境適用旗標、危險旗標與實務建議。

一、什麼是追蹤旗標?

  • 定義:用於啟用或停用 SQL Server 特定行為的旗標
  • 分類:全域 (影響整個執行個體) vs 工作階段 (僅影響目前連線)
  • 定位:屬於「劍走偏鋒」的調優手段,必須先套用基本 Best Practice 後,才考慮使用

二、三種控制方式

1. DBCC 命令 (最彈性,支援 Session/Global)

-- 啟用全域旗標 2203
DBCC TRACEON (2203, -1);  -- -1 = Global Scope

-- 停用工作階段旗標 2203
DBCC TRACEOFF (2203, 1);  -- 1 = Session Scope (預設)

-- 查看目前啟用狀態
DBCC TRACESTATUS;

2. SQL Server 組態管理器啟動參數 (僅 Global,需重啟服務)

  • 路徑:SQL Server 服務 → 右鍵「屬性」 → 「啟動參數」
  • 格式:-T2203;-T834;-T1118 (每個旗標前綴 -T,分號分隔)
  • 修改後必須重啟 SQL Server 服務生效

3. 啟動預存程序自動啟用 (適用 DBCC 方式需持久化)

-- 建立啟動程序
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 指定
1118TempDB 統一配置整區 而非混合區減少 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極度危險:可能導致資料遺失、恢復時間暴增

五、實務操作建議

  1. 記錄與變更管理:所有旗標變更記錄在 CMDB,註明用途、負責人、生效時間
  2. 分階段驗證:測試環境 → 預生產 → 生產灰度 → 全面啟用
  3. 監控副作用:啟用後持續監控 CPU、記憶體、I/O、鎖等待、查詢持續時間
  4. 文件化:在執行個體層級延伸屬性或 README 記錄目前啟用旗標清單
  5. 定期審視:每季檢視是否仍需保留,SQL Server 版本升級後重新驗證適用性

六、查看旗標狀態查詢

-- 查看全域與工作階段旗標
DBCC TRACESTATUS (-1);  -- 全域
DBCC TRACESTATUS;       -- 目前工作階段

-- 查看特定旗標
DBCC TRACESTATUS (1118, -1);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved