0. 跟蹤標記 (Trace Flag) 簡介

. 什麼是跟蹤標記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)    若是要在生產環境使用,請儘量多的測試,尤爲是非文檔記載的跟蹤標記;

相關文章
相關標籤/搜索