使用SQL Server Profiler監視系統的一些基本概念和各種事件的監視
這兩天需要搞一份我們某個系統的夜間數據庫處理的所有數據,從晚上8點左右到早上9點左右都在做數據處理。所以PM希望能夠看看晚上的數據處理高峰期和一些事物以及數據庫的使用情況,所以需要用profiler來做個像樣的分析。如果你不知道一些概念和指標,可以看看這篇文章。
數據列描述為跟蹤內捕獲的每個事件類所收集的數據。事件類確定收集的數據類型,因此并不是所有數據列都適用于所有事件類。例如,為Lock:Acquired事件類捕獲Binary Data數據列時,該數據列包含鎖定的頁ID或行的值,但沒有Integer Data事件類的值。對于所有事件類,默認數據列均為自動填充。
SQL事件探查器使您得以在創建模板時選擇數據列。這些數據列表現在運行跟蹤時希望返回的信息。在SQL事件探查器中顯示的數據可以按事件發生的順序顯示,也可以按一個數據列或數據列組合分組顯示。
下表描述默認情況下選定的SQL事件探查器數據列。
數據列
列號
描述
Application Name1
10
創建與SQL Server實例的連接的客戶端應用程序名。 該列由應用程序傳遞的值填充,而不是由所顯示的程序名填充。
Binary Data
2
與在跟蹤中捕獲的事件類相關的二進制值。
ClientProcessID1
9
由主機計算機分配給進程的ID,在該進程中客戶應用程序正在運行。如果客戶端提供客戶端進程ID,則填充此數據列。
Column Permissions
44
表明是否已設置了列權限。分析語句文本,以確定將哪些權限應用到了哪些列。
CPU
18
事件所使用的CPU時間總計(以毫秒為單位)。
Database ID1
3
USE database語句所指定的數據庫ID,如果沒有對給定實例發出過USE database語句,則是默認數據庫。如果在跟蹤內捕獲Server Name數據列且服務器可用,則SQL事件探查器將顯示數據庫名。 通過使用DB_ID函數確定數據庫的值。
DatabaseName
35
正在運行用戶語句的數據庫的名稱。
DBUserName1
40
客戶端的SQL Server用戶名。
Duration
13
事件所花費的時間總計(以毫秒為單位)。
End Time
15
事件結束時的時間。啟動事件的事件類(如SQL:BatchStarting或SP:Starting)的該列不填充。
Error
31
給定事件的錯誤號。通常是存儲在sysmessages中的錯誤號。
EventClass1
27
捕獲的事件類類型。
EventSubClass1
21
事件子類的類型,提供有關每個事件類的進一步信息。例如,Execution Warning事件類的事件子類值代表執行警告的類型:
1 =查詢等待。查詢必須等待資源(如內存)才能執行。
2 =查詢超時。查詢在等待執行所需的資源時超時。所有事件類的該數據列均不填充。
FileName
36
所修改的文件的邏輯名稱。
Handle
33
ODBC、OLE DB或DB-Library所用的整數,用以協調服務器的執行。
Host Name1
8
正運行客戶端的計算機名。如果客戶端提供主機名,則填充此數據列。若要確定主機名,請使用HOST_NAME函數。
Index ID
24
受事件影響的對象上的索引ID。若要確定對象的索引ID,請使用sysindexes系統表的indid列。
Integer Data
25
與在跟蹤中捕獲的事件類相關的整型值。
LoginName
11
用戶的登錄名(SQL Server安全登錄或Microsoft Windows?登錄憑據,格式為DOMAIN/Username)。
LoginSid1
41
登錄用戶的安全標識號(SID)。可以在master數據庫的sysxlogins表中找到該信息。對于服務器中的每個登錄,SID是唯一的。
Mode
32
不同事件所用的整數,用于描述事件已接收或要請求的狀態。
NestLevel
29
表示@@NESTLEVEL所返回的數據的整數。
NT Domain Name1
7
用戶所屬的Microsoft Windows NT? 4.0或Windows 2000域。
NT User Name1
6
Windows NT 4.0或Windows 2000用戶名。
Object ID
22
系統分配的對象ID。
ObjectName
34
引用的對象名。
ObjectType
28
表示事件中涉及的對象類型的值。該值對應于sysobjects中的type列。
Owner Name
37
對象所有者的數據庫用戶名稱。
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
Reads
16
服務器代表事件執行的邏輯磁盤讀取數。
RoleName
38
要啟用的應用程序角色名。
Server Name1
26
跟蹤的SQL Server實例名。
Severity
20
異常錯誤的嚴重級別。
SPID1
12
SQL Server指派的與客戶端相關的服務器進程ID。
Start Time1
14
啟動事件的時間(可用時)。
State
30
等同于錯誤狀態代碼。
Success
23
表示事件是否成功。取值包括:
1 =成功。
0 =失敗
例如,1表示權限檢查成功,0表示該檢查失敗。
TargetLoginName
42
對于以登錄為目標的操作(例如,添加新登錄),是目標登錄的名稱。
TargetLoginSid
43
對于以目標為登錄的操作(例如,添加新登錄),是目標登錄的SID。
TargetUserName
39
對于以數據庫用戶為目標的操作(例如授予用戶權限),是該用戶的名稱。
TextData
1
與跟蹤內捕獲的事件類相關的文本值。但是,如果正在跟蹤參數化查詢,則不以TextData列中的數據值顯示變量。
Transaction ID
4
系統分配的事務ID。
Writes
17
服務器代表事件執行的物理磁盤寫入數。
事件類是描述由服務器生成的事件的列。事件類確定收集的數據類型,因此并不是所有數據列都適用于所有事件類。
每個事件類的子類都可以通過一些數據列來進行分析:
微軟提供的所有事件類和數據列的對應分析如下:






最后是用戶自己定義的事件類:

以我們常用的存儲過程事件類來說明如何結合列進行存儲過程事件類分析:
首先給出事件類和數據列的對應關系:
事件類
數據列
描述
RPC Output Parameter
Event Class
記錄的事件類型= 100。
Object Name
來自RPC事件(如句柄)的輸出參數名。
Text Data
在由遠程過程調用(RPC)返回的對象名中命名的參數值。
RPC:Completed
Event Class
記錄的事件類型= 10。
End Time
RPC的結束時間。
Duration
RPC的持續時間。
CPU
RPC所使用的CPU數量。
Reads
由RPC發出的頁讀取數。
Writes
由RPC發出的頁寫入數。
Text Data
RPC文本。
RPC:Starting
Event Class
記錄的事件類型= 11。
Text Data
RPC文本。
SP:CacheHit
Event Data
記錄的事件類型= 38。
Object ID
在高速緩存中找到的存儲過程的對象ID。
Object Name
在高速緩存中找到的存儲過程名。
Text Data
在高速緩存中找到的SQL語句的文本。
SP:CacheInsert
Event Class
記錄的事件類型= 35。
Object ID
存儲過程的對象ID。
Object Name
在高速緩存中找到的存儲過程名。
Text Data
正在高速緩存的SQL語句的文本。
SP:CacheMiss
Event Class
記錄的事件類型= 34。
Event Sub Class
存儲過程的嵌套級。
Object Name
在高速緩存中找到的存儲過程名。
SP:CacheRemove
Event Class
記錄的事件類型= 36。
Object ID
存儲過程的對象ID。
Object Name
在高速緩存中找到的存儲過程名。
Text Data
正在從高速緩存中刪除的SQL語句的文本。
SP:Completed
Event Class
記錄的事件類型= 43。
Nest Level
存儲過程的嵌套級。
End Time
事件的結束時間。
Duration
存儲過程運行的時間長度。
Object ID
存儲過程的對象ID。
Object Name
在高速緩存中找到的存儲過程名。
Object Type
調用的存儲過程類型。
Text Data
存儲過程調用的文本。
SP:ExecContextHit
Event Class
記錄的事件類型= 39。
Object ID
存儲過程的對象ID。
Object Name
在高速緩存中找到的存儲過程名。
Text Data
在高速緩存中找到的存儲過程的文本。
SP:Recompile
Event Class
記錄的事件類型= 37。
Nest Level
存儲過程的嵌套級。
Object ID
存儲過程的對象ID。
Object Name
在高速緩存中找到的存儲過程名。
Text Data
觸發重新編譯的存儲過程的文本。
SP:Starting
Event Class
記錄的事件類型= 42。
Nest Level
存儲過程的嵌套級。
Object ID
存儲過程的對象ID。
Object Name
在高速緩存中找到的存儲過程名。
Object Type
正在啟動的存儲過程類型。
Text Data
存儲過程調用的文本。
SP:StmtCompleted
Event Class
記錄的事件類型= 45。
Event Sub Class
存儲過程的嵌套級。
Integer Data
語句返回的實際行數。
Object ID
系統指派的存儲過程ID。
Text Data
存儲過程內的語句文本。
SP:StmtStarting
Event Class
記錄的事件類型= 44。
Event Sub Class
存儲過程的嵌套級。
Object ID
系統指派的存儲過程ID。
Text Data
存儲過程內的語句文本。
然后是每個子事件類的說明:
事件類
描述
RPC Output Parameter
顯示有關先前執行的遠程過程調用(RPC)的輸出參數的信息。
RPC:Completed
在已完成RPC后發生。
RPC:Starting
在RPC已啟動后發生。
SP:CacheHit
在高速緩存內找到過程。
SP:CacheInsert
有項目插入過程高速緩存內。
SP:CacheMiss
在過程高速緩存內沒找到存儲過程。
SP:CacheRemove
項目已從過程高速緩存中刪除。
SP:Completed
存儲過程已完成。
SP:ExecContextHit
在高速緩存內找到存儲過程的執行版本。
SP:Recompile
存儲過程已重新編譯。
SP:Starting
存儲過程已啟動。
SP:StmtCompleted
存儲過程內的語句已完成。
SP:StmtStarting
存儲過程內的語句已啟動。