在 SQL 跟蹤中,如果事件是在跟蹤定義中列出的事件類的實例,則收集這些事件。可以將這些事件從跟蹤中篩選出來或為其目標進行排隊。目標可以是文件或 SQL Server 管理對象 (SMO),它可以使用管理 SQL Server 的應用程式中的跟蹤信息。SQL 跟蹤的優點 Microsoft S...
在 SQL 跟蹤中,如果事件是在跟蹤定義中列出的事件類的實例,則收集這些事件。可以將這些事件從跟蹤中篩選出來或為其目標進行排隊。目標可以是文件或 SQL Server 管理對象 (SMO),它可以使用管理 SQL Server 的應用程式中的跟蹤信息。
SQL 跟蹤的優點Microsoft SQL Server 提供 Transact-SQL 系統存儲過程來創建對 SQL Server 資料庫引擎實例的跟蹤。可以不使用 SQL Server Profiler,而使用這些系統存儲過程從您自己的應用程式中手動創建跟蹤。這樣,您就可以針對企業的特定需求編寫自定義應用程式。
SQL 跟蹤結構事件源可以是生成跟蹤事件(例如 Transact-SQL 批處理)或 SQL Server 事件(例如死鎖)的任何源。有關事件的詳細信息,請參閱 SQL Server 事件類參考。事件發生後,如果該事件類已經包含在跟蹤定義中,則跟蹤將收集該事件信息。如果已經在跟蹤定義中為該事件類定義篩選器,則將應用這些篩選器並將跟蹤事件信息傳遞到隊列。從隊列中,跟蹤信息或者被寫入文件,或者由應用程式(例如 SQL Server Profiler)中的 SMO 使用。以下關係圖顯示了在跟蹤期間 SQL 跟蹤如何收集事件。
使用數據列描述返回的事件跟蹤運行時,SQL 跟蹤使用跟蹤輸出中的數據列來描述返回的事件。下表說明瞭 SQL Server Profiler 數據列(這些數據列與 SQL 跟蹤使用的數據列相同),並指示預設情況下選擇的列。
數據列 | 列號 | 說明 |
---|---|---|
ApplicationName 1 |
10 |
客戶端應用程式的名稱,該客戶端應用程式創建了指向 SQL Server 實例的連接。此列由該應用程式傳遞的值填充,而不是由程式名填充的。 |
BigintData1 |
52 |
值 (bigint 數據類型),取決於跟蹤中指定的事件類。 |
BigintData2 |
53 |
值 (bigint 數據類型),取決於跟蹤中指定的事件類。 |
Binary Data |
2 |
依賴於跟蹤中捕獲的事件類的二進位值。 |
ClientProcessID 1 |
9 |
由主機分配給正在運行客戶端應用程式的進程的 ID。如果客戶端提供了客戶端進程 ID,則填充此數據列。 |
ColumnPermissions |
44 |
表示是否已設置了列許可權。可以分析語句文本來確定各列所應用許可權的情況。 |
CPU |
18 |
事件使用的 CPU 時間(毫秒)。 |
Database ID1 |
3 |
由 USE database_name 語句指定的資料庫的 ID;如果未對給定實例發出 USE database_name語句,則為預設資料庫的 ID。如果在跟蹤中捕獲 ServerName 數據列而且伺服器可用,則 SQL Server Profiler 將顯示資料庫名。若要確定資料庫的值,請使用 DB_ID 函數。 |
DatabaseName |
35 |
正在運行用戶語句的資料庫的名稱。 |
DBUserName 1 |
40 |
客戶端的 SQL Server 用戶名。 |
Duration |
13 |
事件的持續時間(微秒)。 伺服器以微秒(百萬分之一秒或 10-6 秒)為單位報告事件的持續時間,以毫秒(千分之一秒或 10-3 秒)為單位報告事件使用的 CPU 時間。SQL Server Profiler 圖形用戶界面預設以毫秒為單位顯示“持續時間”列,但是當跟蹤保存到文件或資料庫表中時,將以微秒為單位寫入“持續時間”列值。 |
EndTime |
15 |
事件的結束時間。對指示事件開始的事件類(例如 SQL:BatchStarting 或SP:Starting)將不填充此列。 |
Error |
31 |
給定事件的錯誤號。通常是 sysmessages 中存儲的錯誤號。 |
EventClass1 |
27 |
捕獲的事件類的類型。 |
EventSequence |
51 |
此事件的序列號。 |
EventSubClass 1 |
21 |
事件子類的類型,提供有關每個事件類的詳細信息。例如,Execution Warning 事件類的事件子類值代表執行警告的類型: 1 = 查詢等待。查詢執行之前必須等待資源;例如,記憶體。 2 = 查詢超時。查詢等待執行所需資源時超時。對於所有事件類,均不填充此數據列。 |
GUID |
54 |
依賴於跟蹤中指定的事件類的 GUID 值。 |
FileName |
36 |
所修改的文件的邏輯名稱。 |
Handle |
33 |
一個整數,ODBC、OLE DB 或 DB-Library 使用它來協調伺服器的執行情況。 |
HostName1 |
8 |
正在運行客戶端程式的電腦的名稱。如果客戶端提供了主機名,則填充此數據列。若要確定主機名,請使用 HOST_NAME 函數。 |
IndexID |
24 |
受事件影響的對象的索引 ID。若要確定對象的索引 ID,請參見 sysindexes 系統表的 indid 列。 |
IntegerData |
25 |
跟蹤中捕獲的與事件類對應的整數值。 |
IntegerData2 |
55 |
跟蹤中捕獲的與事件類對應的整數值。 |
IsSystem |
60 |
指示該事件發生在系統進程還是用戶進程上: 1 = 系統 0 = 用戶 |
LineNumber |
5 |
包含存在錯誤的行的行號。對於涉及 Transact-SQL 語句的事件(如 SP:StmtStarting),LineNumber 包含存儲過程或批處理中語句的行號。 |
LinkedServerName |
45 |
鏈接伺服器的名稱。 |
LoginName |
11 |
用戶的登錄名(SQL Server 安全登錄名或 Windows 登錄憑據,格式為“域/用戶名”)。 |
LoginSid 1 |
41 |
已登錄的用戶的安全標識符 (SID)。您可以在 master 資料庫的 sys.server_principals 視圖中找到此信息。伺服器中的每個登錄名都具有唯一的 ID。 |
MethodName |
47 |
OLEDB 方法的名稱。 |
Mode |
32 |
一個整數,各種事件都使用它來描述事件要請求或已接收的狀態。 |
NestLevel |
29 |
一個整數,表示 @@NESTLEVEL 返回的數據。 |
NTDomainName 1 |
7 |
用戶所屬的 Microsoft Windows 域。 |
NTUserName 1 |
6 |
Windows 用戶名。 |
ObjectID |
22 |
系統分配的對象 ID。 |
ObjectID2 |
56 |
相關對象或實體(如果存在)的 ID。 |
ObjectName |
34 |
被引用對象的名稱。 |
ObjectType2 |
28 |
表示事件中涉及的對象類型的值。該值對應於 sysobjects 中的 type 列。 |
Offset |
61 |
語句在存儲過程或批處理中的起始偏移量。 |
OwnerID |
58 |
僅限鎖事件。擁有鎖的對象的類型。 |
OwnerName |
37 |
對象所有者的資料庫用戶名。 |
ParentName |
59 |
該對象所在的架構的名稱。 |
Permissions |
19 |
表示所檢查的許可權類型的整型值。值為: 1 = SELECT ALL 2 = UPDATE ALL 4 = REFERENCES ALL 8 = INSERT 16 = DELETE 32 = EXECUTE(僅過程) 4096 = SELECT ANY(至少一列) 8192 = UPDATE ANY 16384 = REFERENCES ANY |
ProviderName |
46 |
OLEDB 訪問介面的名稱。 |
Reads |
16 |
由伺服器代表事件讀取邏輯磁碟的次數。這些讀取操作數包含在語句執行期間讀取表和緩衝區的次數。 |
RequestID |
49 |
包含該語句的請求的 ID。 |
RoleName |
38 |
正在啟用的應用程式角色名。 |
RowCounts |
48 |
批處理中的行數。 |
ServerName 1 |
26 |
正在跟蹤的 SQL Server 實例的名稱。 |
SessionLoginName |
64 |
發起會話的用戶的登錄名。例如,如果您使用 Login1 連接到 SQL Server 並以 Login2 身份執行語句,則SessionLoginName 將顯示 Login1,而 LoginName 將顯示 Login2。此數據列將同時顯示 SQL Server 登錄名和 Windows 登錄名。 |
Severity |
20 |
異常錯誤事件的嚴重級別。 |
SourceDatabaseID |
62 |
存在該對象的源的資料庫 ID。 |
SPID |
12 |
SQL Server 為客戶端的相關進程分配的伺服器進程 ID (SPID)。 |
SqlHandle |
63 |
基於即席查詢文本或 SQL 對象的資料庫和對象 ID 的 64 位哈希運算。可以將該值傳遞到sys.dm_exec_sql_text() 以檢索關聯的 SQL 文本。 |
StartTime 1 |
14 |
事件(如果有)的開始時間。 |
狀態 |
30 |
錯誤狀態代碼。 |
Success |
23 |
表示事件是否成功。值包括: 1 = 成功。 0 = 失敗 例如,1 表示許可權檢查成功,而 0 表示許可權檢查失敗。 |
TargetLoginName |
42 |
如果是針對登錄的操作(例如,添加新的登錄),這是所針對登錄的名稱。 |
TargetLoginSid |
43 |
如果是針對登錄的操作(例如,添加新的登錄),這是所針對登錄的 SID。 |
TargetUserName |
39 |
如果是針對某個資料庫用戶的操作(例如,授予用戶許可權),這是該用戶的名稱。 |
TextData |
1 |
依賴於跟蹤中捕獲的事件類的文本值。但是,如果跟蹤參數化查詢,則不以 TextData 列中的數據值顯示變數。 |
Transaction ID |
4 |
系統為事務分配的 ID。 |
類型 | 57 |
跟蹤中捕獲的與事件類對應的整數值。 |
Writes |
17 |
由伺服器代表事件寫入物理磁碟的次數。 |
XactSequence |
50 |
用於說明當前事務的標記。 |
1 預設情況下,對於所有事件,均填充這些數據列。
2 有關 ObjectType 數據列的詳細信息,請參閱ObjectType 跟蹤事件列。
SQL 跟蹤任務