一. 什麼是跟蹤標記sql
SQL Server 跟蹤標記(Trace Flag),像是一個開關,可用來自定義SQL Server的某種行爲或特性,在性能診斷,系統調試等方面較爲經常使用。好比:開啓1204或1222跟蹤標記,可在errorlog裏記錄死鎖信息的明細。數據庫
跟蹤標記有會話級和實例級兩種。性能
二. 如何開啓跟蹤標記測試
1. 在SQL Server 服務啓動時開啓spa
SQL Server服務從相似以下路徑啓動程序:命令行
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQL2016\MSSQL\Binn\sqlservr.exe調試
而sqlservr.exe接受一些啓動參數,其中就包含了跟蹤標記。code
以命名實例MSSQL2016,跟蹤標記610 爲例: blog
1.1 使用sqlservr.exe來啓動文檔
(1) 先停掉服務 (以管理員身份運行cmd命令窗口)
默認實例:net stop MSSQLSERVER / net stop "SQL Server (MSSQLSERVER)"
命名實例:net stop MSSQL$MSSQL2016 / net stop "SQL Server (MSSQL2016)"
(2) 啓動服務 (先cd切換到sqlservr.exe目錄)
默認實例:sqlservr.exe –T610
命名實例:sqlservr.exe -sMSSQL2016 –T610
命令行舉例:
C:\Windows\system32>net stop MSSQL$MSSQL2016 The SQL Server (MSSQL2016) service is stopping. The SQL Server (MSSQL2016) service was stopped successfully. C:\Windows\system32>cd C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQL2016\MSSQL\Binn\ C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQL2016\MSSQL\Binn>sqlservr -sMSSQL2016 -T610
在數據庫裏執行SQL語句,可看到已啓動的跟蹤標記:
dbcc tracestatus(-1) --TraceFlag Status Global Session --610 1 1 0
注:
(1) 以這種方式啓動的SQL Server,服務狀態仍然是中止,可是SSMS/SQLCMD都可以鏈接並執行SQL語句,一般用於系統故障診斷/維護時,不做爲常規啓動方式使用;
(2) 關閉當前的cmd窗口,便可關閉該次啓動;
1.2使用net命令來啓動
(1) 先停掉服務 (以管理員身份運行cmd命令窗口)
默認實例:net stop MSSQLSERVER 或 net stop "SQL Server (MSSQLSERVER)"
命名實例:net stop MSSQL$MSSQL2016或 net stop "SQL Server (MSSQL2016)"
(2) 啓動服務(以管理員身份運行cmd命令窗口)
默認實例:net start MSSQLSERVER /T610 或net start "SQL Server (MSSQLSERVER)" /T610
命名實例:net start MSSQL$MSSQL2016 /T610 或net start "SQL Server (MSSQL2016)" /T610
命令行舉例:
C:\Windows\system32>net stop MSSQL$MSSQL2016 The SQL Server (MSSQL2016) service is stopping. The SQL Server (MSSQL2016) service was stopped successfully. C:\Windows\system32>net start MSSQL$MSSQL2016 /T610 The SQL Server (MSSQL2016) service is starting. The SQL Server (MSSQL2016) service was started successfully.
在數據庫裏執行SQL語句,可看到已啓動的跟蹤標記:
dbcc tracestatus(-1) --TraceFlag Status Global Session --610 1 1 0
注:
(1) 以net命令啓動SQL Server服務時,exe程序的參數經過斜線(/)來傳遞而不是橫線(-):/T610;
1.3 使用配置管理器 (Configuration Manager) 來啓動
打開SQL Server 配置管理器\SQL Server 服務\選擇相應實例:
(1) 中止相應實例的服務
(2) 屬性\啓動參數, 輸入-T610 並添加
(3) 啓動相應實例的服務
在數據庫裏執行SQL語句,可看到已啓動的跟蹤標記:
dbcc tracestatus(-1) --TraceFlag Status Global Session --610 1 1 0
注:
(1) 啓動參數被保存在註冊表裏,在服務啓動時加載,因此會一直有效,直到在啓動參數中刪除該項並保存;
(2) 在配置管理器中修改SQL Server服務相關的參數爲最佳實踐(Best Practice),推薦;
2. 在SQL Server 服務啓動後開啓
在SQL Server服務啓動後,可經過DBCC命令來開/關跟蹤標記
--開啓會話級跟蹤標記 dbcc traceon(610) --會話級跟蹤標記,只能在所在會話關閉 dbcc traceoff(610) --開啓實例級跟蹤標記 dbcc traceon(610,-1) --實例級跟蹤標記,在全部會話均可關閉 dbcc traceoff(610,-1) --指定-1,顯示全部已開啓跟蹤標記 dbcc tracestatus(-1)
注:
(1) 會話級跟蹤標記,只對當前會話有效,其餘會話不受影響;
(2) 實例級跟蹤標記,整個實例有效;
小結:
(1) 以上幾種方式,只有在SQL Server配置管理器裏修改啓動參數添加跟蹤標記,會被保存到註冊表,從而每次啓動服務時跟蹤標記均可以生效,其餘幾種方式只是在當前的命令行裏開啓了跟蹤標記選項,正常重啓服務後,跟蹤標記就不見了;
(2) 只有DBCC traceon 可開啓會話級跟蹤標記,其餘開啓方式均爲實例級;
(3) 若是要在生產環境使用,請儘量多的測試,尤爲是非文檔記載的跟蹤標記;