共用方式為


SQL 追蹤

在 SQL 追蹤中,如果事件是列在追蹤定義中之事件類別的執行個體,這些事件就會被蒐集起來。 您可將這些事件篩選掉,也可以放入分配目的地的佇列中。 目的地可以是檔案或 SQL Server 管理物件 (SMO),後者會在用於管理 SQL Server 的應用程式中使用這些追蹤資訊。

重要事項重要事項

未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。請改用擴充事件。

SQL 追蹤的優點

Microsoft SQL Server 所提供的 Transact-SQL 系統預存程序可建立 SQL Server Database Engine 執行個體的追蹤。 您可以從自己的應用程式中使用這些系統預存程序以手動建立追蹤,而不是使用 SQL Server Profiler 建立追蹤。 如此一來,就可以依照您的企業需求撰寫自訂的應用程式。

SQL 追蹤架構

「事件來源」可以是任何產生追蹤事件的來源,例如 Transact-SQL 批次,或類似死結的 SQL Server 事件。 如需事件的詳細資訊,請參閱<SQL Server 事件類別參考>。 發生事件之後,如果其事件類別已納入追蹤定義內,追蹤就會蒐集事件資訊。 如果追蹤定義內已針對該事件類別定義了篩選,便會套用篩選並將追蹤事件資訊傳遞給佇列。 佇列中的追蹤資訊會寫入檔案,或由 SMO 在應用程式 (例如 SQL Server Profiler) 中使用該資訊。 下列圖表顯示 SQL 追蹤如何在追蹤期間蒐集事件。

Database Engine 事件追蹤處理

SQL 追蹤詞彙

下列詞彙說明 SQL 追蹤的主要概念。

  • 事件
    Microsoft SQL Server Database Engine 執行個體內所發生的動作。

  • 資料行
    事件的屬性。

  • 事件類別
    可追蹤的事件類型。 事件類別包含所有可由事件報告的資料行。

  • 事件類別目錄
    相關事件類別的群組。

  • 追蹤 (名詞)
    Database Engine 所傳回之事件與資料的集合。

  • 追蹤 (動詞)
    收集及監視 SQL Server 執行個體中的事件。

  • 追蹤定義
    事件類別、資料行與篩選 (可識別追蹤期間所要收集的事件類型) 的集合。

  • 篩選
    限制追蹤所收集之事件的條件。

  • 追蹤檔案
    在儲存追蹤時所建立的檔案。

  • 範本
    在 SQL Server Profiler 中,用以定義追蹤所要收集之事件類別與資料行的檔案。

  • 追蹤資料表
    在 SQL Server Profiler 中,當追蹤儲存至資料表時所建立的資料表。

使用資料行描述傳回的事件

SQL 追蹤使用追蹤輸出的資料行來描述追蹤執行時傳回的事件。 下表描述的是 SQL Server Profiler 資料行,這些資料行與 SQL 追蹤使用的資料行相同,同時也會指出預設會選取的資料行。

資料行

資料行編號

說明

ApplicationName 1

10

建立 SQL Server 執行個體之連接的用戶端應用程式名稱。 這個資料行會填入應用程式所傳送的值,而非程式的名稱。

BigintData1

52

值 (bigint 資料類型),會視追蹤指定的事件類別而定。

BigintData2

53

值 (bigint 資料類型),會視追蹤指定的事件類別而定。

Binary Data

2

二進位值,依據在追蹤中所擷取的事件類別而定。

ClientProcessID 1

9

主機電腦指派給用戶端應用程式執行中處理序的識別碼。 如果用戶端提供處理序識別碼,這個資料行就會擴展。

ColumnPermissions

44

指出是否設定資料行權限。 您可以剖析陳述式文字,以判斷資料行所套用的權限。

CPU

18

事件所使用的 CPU 時間量 (以毫秒為單位)。

Database ID 1

3

由 USE database_name 陳述式所指定的資料庫識別碼,或者如果沒有針對指定執行個體發出 USE database_name陳述式,則是預設資料庫的識別碼。 如果在追蹤當中擷取了 Server Name 資料行,SQL Server Profiler 會顯示資料庫名稱。 請使用 DB_ID 函數判斷資料庫的值。

DatabaseName

35

正在其中執行使用者陳述式的資料庫名稱。

DBUserName 1

40

用戶端的 SQL Server 使用者名稱。

Duration

13

事件的持續期間 (以百萬分之一秒為單位)。

[!附註]

在 SQL Server 2005 或更新版本中,伺服器會以百萬分之一秒為單位 (百萬分之一秒,或 10-6 秒) 報告事件的持續時間,並以毫秒為單位 (千分之一秒,或 10-3 秒) 報告事件使用的 CPU 時間量。 在 SQL Server 2005 或更新的版本中,SQL Server Profiler 圖形化使用者介面依預設會以毫秒為單位來顯示 Duration 資料行,但是當追蹤儲存到檔案或資料庫資料表時,會以百萬分之一秒為單位來寫入 Duration 資料行值。

EndTime

15

事件結束的時間。 參考到啟動事件的事件類別,例如 SQL:BatchStartingSP:Starting,不會填入這個欄位。

Error

31

給定事件的錯誤代碼。 通常這是儲存在 sysmessages 中的錯誤代碼。

EventClass 1

27

所擷取的事件類別的類型。

EventSequence

51

這個事件的序號。

EventSubClass 1

21

事件子類別的類型,可為每個事件類別提供更詳細的資訊。 例如,Execution Warning 事件類別的事件子類別值代表執行警告的類型:

1 = 查詢等候。 查詢必須等候資源 (例如記憶體) 才得以執行。

2 = 查詢逾時。 等候執行所需的資源時查詢逾時。 所有事件類別的這個資料行都不會擴展。

GUID

54

GUID 值,依據在追蹤內指定的事件類別而定。

FileName

36

所修改之檔案的邏輯名稱。

Handle

33

ODBC、OLE DB 或 DB-Library 用來協調伺服器執行的整數。

HostName 1

8

執行用戶端的電腦名稱。 這個資料行會在用戶端提供主機名稱時填入。 若要得知主機名稱,請使用 HOST_NAME 函數。

IndexID

24

受事件所影響的物件上的索引識別碼。 若要確定物件的索引識別碼,請使用 sysindexes 系統資料表的 indid 資料行。

IntegerData

25

相依於追蹤所擷取之事件類別的整數值。

IntegerData2

55

相依於追蹤所擷取之事件類別的整數值。

IsSystem

60

指出事件是發生於系統處理序或使用者處理序:

1 = 系統

0 = 使用者

LineNumber

5

包含錯誤行號。 如果事件與 Transact-SQL 陳述式 (例如 SP:StmtStarting) 有關,LineNumber 便會將陳述式的行數包含在預存程序或批次中。

LinkedServerName

45

連結伺服器的名稱。

LoginName

11

使用者的登入名稱 (SQL Server 安全性登入或 DOMAIN\Username 格式的 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

系統指派的物件識別碼。

ObjectID2

56

相關物件或實體的識別碼 (如果有的話)。

ObjectName

34

所參考之物件名稱。

ObjectType 2

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

包含陳述式之要求的識別碼。

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

其中存在著物件來源的資料庫之識別碼。

SPID

12

SQL Server 指派給用戶端相關聯之處理序的伺服器處理序識別碼 (SPID)。

SqlHandle

63

這是一個 64 位元雜湊,以隨選查詢的文字或 SQL 物件的資料庫和物件識別碼為基礎。 這個值可以傳給 sys.dm_exec_sql_text(),以擷取相關聯的 SQL 文字。

StartTime 1

14

事件啟動的時間 (如果有的話)。

State

30

錯誤狀態碼。

Success

23

代表事件成功與否。 數值包括:

1 = 成功。

0 = 失敗

例如,1 表示權限檢查成功,0 表示檢查失敗。

TargetLoginName

42

對於目標為登入的動作,這是目標登入的名稱;例如,要加入新登入。

TargetLoginSid

43

對於目標為登入的動作,這是目標登入的 SID;例如,要加入新登入。

TargetUserName

39

對於目標為資料庫使用者的動作,這是該使用者的名稱;例如,要授與使用者權限。

TextData

1

文字值,依據在追蹤中所擷取的事件類別而定。 但是,如果是追蹤參數化查詢,TextData 資料行就不會顯示變數與資料值。

交易識別碼

4

系統指派的交易識別碼。

類型

57

相依於追蹤所擷取之事件類別的整數值。

Writes

17

伺服器代表事件所執行的實體磁碟寫入作業次數。

XactSequence

50

用來描述目前交易的 Token。

1 依預設,所有事件都會擴展這些資料行。

2 如需有關 ObjectType 資料行的詳細資訊,請參閱<ObjectType 追蹤事件資料行>。

SQL 追蹤工作

工作描述

主題

描述如何使用 Transact-SQL 預存程序來建立和執行追蹤。

使用 Transact-SQL 預存程序來建立和執行追蹤

描述在 SQL Server Database Engine 執行個體上如何使用預存程序來建立手動追蹤。

使用預存程序建立手動追蹤

描述如何將追蹤結果儲存至可寫入追蹤結果的檔案。

將追蹤結果儲存至檔案

描述如何使用 temp 目錄中的空間,來改進追蹤資料的存取。

改善追蹤資料的存取

描述如何使用預存程序來建立追蹤。

建立追蹤 (Transact-SQL)

描述如何使用預存程序來建立篩選,只針對所追蹤的事件擷取需要的資訊。

設定追蹤篩選 (Transact-SQL)

描述如何使用預存程序來修改現有的追蹤。

修改現有的追蹤 (Transact-SQL)

描述如何使用內建函數來檢視已儲存的追蹤。

檢視已儲存的追蹤 (Transact-SQL)

描述如何使用內建函數來檢視追蹤篩選資訊。

檢視篩選資訊 (Transact-SQL)

描述如何使用預存程序來刪除追蹤。

刪除追蹤 (Transact-SQL)

描述如何讓追蹤造成的效能成本降至最少。

最佳化 SQL 追蹤

描述如何篩選追蹤,讓追蹤期間造成的負擔降到最低。

篩選追蹤

描述如何將追蹤所收集的資料量降至最低。

限制追蹤檔案和資料表的大小

描述在 Microsoft SQL Server 中排程追蹤的兩種方法。

排程追蹤

請參閱

其他資源

SQL Server Profiler 範本和權限

SQL Server 管理物件 (SMO) 程式設計指南