sql 事件探查器方案

來源:互聯網
上載者:User

 通常情況下,使用 SQL 事件探查器可以:

1.尋找執行最差的查詢

例如,可以建立跟蹤來捕獲與 TSQL 和 Stored Procedure 事件類別(尤其是 RPC:Completed 和 SQL:BatchCompleted)相關的事件。在這個跟蹤內包含所有資料列,按 Duration 分組並指定事件準則。例如,如果指定事件的 Duration 至少為 1,000 毫秒,則可以跟蹤中排除已耗用時間短的事件。根據需要可以增大 Duration 的最小值。如果想一次只監視一個資料庫,為 Database ID 事件準則指定一個值。

2.識別死結原因
例如,可以建立一個跟蹤來捕獲與 TSQL 和 Stored Procedure 事件類別(RPC:Starting 和 SQL:BatchStarting)以及 Locks 事件類別(Lock:Deadlock 和 Lock:Deadlock Chain)相關的事件。在這個跟蹤內包括所有資料列並按 Event Class 分組。如果想一次只監視一個資料庫,為 Database ID 事件準則指定一個值。

若要查看死結所涉及的串連,執行下列操作之一:

開啟包含捕獲的資料的跟蹤,按 ClientProcessID 將資料分組並展開死結所涉及的兩個串連。

將捕獲的資料儲存到一個追蹤檔案,然後開啟這個追蹤檔案兩次,使其顯示在兩個單獨的 SQL 事件探查器視窗內。按 ClientProcessID 將捕獲的資料分組,然後展開死結所涉及的進程 ID;每個死結串連都在一個單獨的視窗內。平鋪視窗以查看導致死結的事件。

3.監視預存程序的效能

例如,可以建立一個跟蹤來捕獲與 Stored Procedure 事件類別(SP:Completed、SP:Starting、SP:StmtCompleted 和 SP:StmtStarting)和 TSQL 事件類別(SQL:BatchStarting 和 SQL:BatchCompleted)相關的事件。在這個跟蹤內包含所有資料列並按 ClientProcessID 分組。如果想一次只監視一個資料庫,為 Database ID 事件準則指定一個值。同樣,如果想一次只監視一個預存程序,為 Object ID 事件準則指定一個值。

4.審核 Microsoft%26amp;reg; SQL Server%26amp;#8482; 活動

可以使用 SQL 事件探查器審核 SQL Server 中的活動。例如,如果安全性系統管理員需要隨時瞭解誰登入到了伺服器,可以建立 SQL 事件探查器跟蹤,提供已登入到伺服器或從伺服器登出的使用者的完整視圖。之後,可出於法律目的使用這些資訊記錄活動,和出於技術目的使用這些資訊跟蹤違反安全性原則的行為。

若要設定 SQL 事件探查器跟蹤來跟蹤已登入到伺服器或從伺服器登出的使用者,請執行下列操作:

建立跟蹤並選擇 Audit Login Event。

若要返回適當的資訊,請指定下列資料列:
EventClass(預設情況下選定)

EventSubClass

LoginSID

LoginName

監視每個使用者的 Transact-SQL 活動。
可以建立跟蹤來捕獲與 Sessions 事件類別、ExistingConnection 和 TSQL 事件類別相關的事件。將所有資料列包含在此跟蹤內,不要指定任何事件準則,並按 DBUserName 將捕獲的事件分組。

 

 

使用 SQL Server Profiler 的第一步是確定監視 SQL Server 執行個體的原因。本主題討論使用 SQL Server Profiler 收集跟蹤資訊的典型方案。

使用 SQL Server Profiler 的典型方案包括:

  • 尋找執行情況最差的查詢。
    例如,可以建立一個捕獲與 TSQLStored Procedure 事件類別(RPC:CompletedSQL:BatchCompleted)相關的事件的跟蹤。在此跟蹤中包括所有資料列,按 Duration 分組並指定事件準則。例如,如果指定事件的 Duration 必須至少為 10000 微秒,則可以從跟蹤中清除期間較短的事件。可以根據需要增大 Duration 的最小值。如果希望一次僅監視一個資料庫,請指定 Database ID 事件標準的值。
  • 確定死結的原因。
    例如,可以建立一個捕獲與 TSQLStored Procedure 事件類別(RPC:StartingSQL:BatchStarting)和 Locks 事件類別(Deadlock graphLock:DeadlockLock:Deadlock Chain)相關的事件的跟蹤。在此跟蹤中包括所有資料列並按 Event Class 分組。如果希望一次僅監視一個資料庫,請指定 Database ID 事件標準的值。如果指定 Deadlock graph 事件類別,SQL Server Profiler 將產生圖形化表示形式的死結。有關詳細資料,請參閱使用 SQL Server Profiler 分析死結
    若要查看死結中涉及的串連,請執行下列操作之一:
    • 開啟包含捕獲的資料的跟蹤,按 ClientProcessID 對資料進行分組並展開死結中涉及的兩個串連。
    • 將捕獲的資料儲存到追蹤檔案中,然後兩次開啟此追蹤檔案,使其出現在兩個單獨的 SQL Server Profiler 視窗中。按 ClientProcessID 對捕獲的資料進行分組,然後展開死結中涉及的用戶端進程 ID;每個死結的串連將出現在一個單獨的視窗中。平鋪這兩個視窗以查看導致死結的事件。如果要將特定死結圖形資料儲存到檔案,請按右鍵死結事件並選擇“提取事件數目據”
  • 監視預存程序效能。
    例如,可以建立一個捕獲與 Stored Procedure 事件類別(SP:CompletedSP:StartingSP:StmtCompletedSP:StmtStarting)和 TSQL 事件類別(SQL:BatchStartingSQL:BatchCompleted)相關的事件的跟蹤。在此跟蹤中包括所有必要的資料列並按 ClientProcessID 分組。如果希望一次只監視一個資料庫,請使用資料庫 ID 篩選器為“資料庫 ID”事件標準指定一個值。同樣,如果希望一次只監視一個預存程序,請使用物件識別碼 篩選器為“物件識別碼”事件標準指定一個值。
  • 審核 SQL Server 活動。
    例如,如果安全性系統管理員經常需要瞭解登入到伺服器的使用者,則 SQL Server Profiler 跟蹤可以提供登入到伺服器或從伺服器登出的使用者的完整記錄。而且,此資訊可用於法律或技術目的。
    建立跟蹤,並選擇 Audit Login 事件。若要返回適當的資訊,請指定下列資料列:EventClass(預設選擇)、EventSubClassLoginSIDLoginName
  • 監視每個使用者的 Transact-SQL 活動。
    可以建立一個捕獲與 SessionsExistingConnectionTSQL 事件類別相關的事件的跟蹤。在此跟蹤中包括所有資料列,不指定任何事件準則並按 DBUserName 對捕獲的事件進行分組。
  • 收集用於壓力測試的事件典型樣本。
    SQL Server Profiler 提供一個預定義的 TSQL_Replay 模板,此模板可用於迭代最佳化,例如基準測試。
  • 收集通過資料庫引擎 最佳化顧問最佳化物理資料庫設計的事件樣本。
    SQL Server Profiler 提供一個預定義的最佳化模板,此模板收集跟蹤輸出中的相應 Transact-SQL 事件以用作資料庫引擎 最佳化顧問中的工作負載。

 

SQL 事件探查器


在解決 SQL Server 7.0 或更高版本的應用程式效能問題時,SQL 事件探查器是一種非常有效工具。SQL 事件探查器可以使您輕鬆地捕獲在正常負載下伺服器上發生的所有事件,並提供有關這些事件的資訊。將 SQL 事件探查器與 Microsoft Windows NT 效能監控器和一些簡單的查詢配合使用來確定是否發生阻塞,可為您提供解決大多數效能問題所必需的資訊。

監視對象

1. 設定 SQL 事件探查器以捕獲跟蹤。為此,請按照下列步驟操作:

a. 開啟 SQL 事件探查器。
b. 在“工具”菜單上,單擊“選項”。
c. 確保選中了所有事件類別所有資料列選項。
d. 單擊“確定”。
e. 建立一個新的跟蹤。
f. 在[檔案] 功能表上,指向“建立”,然後單擊“跟蹤”。
g. 在“常規”選項卡上,指定跟蹤名稱和捕獲資料的檔案。
h. 在“事件”選項卡上,將下列事件類型添加到跟蹤:

標題 要添加的事件 說明
Cursors CursorPrepare 此事件表示已經使用 ODBC、OLEDB 或 DB-Library 在 SQL 陳述式上準備了游標。
Error and Warning Missing Column Statistics 此事件表示可能對“最佳化器”有用的列統計資訊不可用。文本列顯示丟失了統計資訊的多個列。此事件連同 Misc:Auto-UpdateStats 事件表示已觸發自動建立統計資訊選項。
Misc. Attention 此事件表示用戶端發送了一個注意訊號。
Misc. Auto-UpdateStats 此事件表示已觸發自動更新統計資訊選項。
Misc. Exec Prepared SQL 此事件表示 ODBC、OLE DB 或 DB-Library 執行了一個(或多個)以前準備的 Transact-SQL 陳述式。
Misc. Execution Plan 此事件表示執行了 Transact-SQL 陳述式的計劃樹。
Misc. Prepare SQL 此事件表示 ODBC、OLE DB 或 DB-Library 應用程式準備了要使用的一個(或多個)Transact-SQL 陳述式。
Misc. Unprepare SQL 此事件表示 ODBC、OLE DB 或 DB-Library 應用程式未準備要使用的一個(或多個)Transact-SQL 陳述式。
Sessions Connect 此事件表示已建立一個新的串連。
Sessions Disconnect 此事件表示用戶端已中斷連線。
Sessions Existing Connection 此事件表示啟動 SQL 事件探查器跟蹤時存在一個串連。
Stored Procedures SP:Completed 此事件表示預存程序已完成執行。
Stored Procedures SP:Recompile 此事件表示預存程序在執行期間被重新編譯。
Stored Procedures SP:Starting 此事件表示預存程序已經開始執行。
Stored Procedures SP:StmtCompleted 此事件表示預存程序中的語句已完成執行。
TSQL: SQL:BatchCompleted 此事件表示 Transact-SQL 批處理已完成。文本列顯示已執行的語句。
TSQL: SQL:StmtCompleted 此事件表示 Transact-SQL 陳述式已完成。文本列顯示已執行的語句。
TSQL: RPC:Completed 此事件表示遠端程序呼叫 (RPC) 已完成。
i. 如果應用程式收到逾時錯誤、停止回應(掛起)或遇到使有問題的語句永遠不能結束啟動並執行其他事件,那麼還應包括下列事件:

TSQL: SQL:BatchStarting 此事件表示 Transact-SQL 批處理的開始。文本列顯示正在執行的語句。
TSQL: SQL:StmtStarting 此事件表示 Transact-SQL 陳述式的開始。文本列顯示正在執行的語句。
TSQL: RPC:Starting 此事件表示遠端程序呼叫 (RPC) 的開始。
Stored Procedures SP:StmtStarting 此事件表示預存程序中的語句正在開始執行。

這將協助您確保可以看見逾時發生時正在執行的語句

j. 資料列選項卡上,確保包含下面的列:

對於 SQL Server 2000

開始時間

結束時間

LoginSid

SPID

事件類別

文本資料

整數資料

位元據

期間

CPU

讀取

寫入

應用程式名稱

NT 使用者名稱

DB 使用者名稱

對於 SQL Server 7.0

開始時間

結束時間

串連 ID

SPID

事件類別

文本

整數資料

位元據

期間

CPU

讀取

寫入

應用程式名稱

NT 使用者名稱

SQL 使用者名稱

有關使用 SQL 事件探查器的資訊,請參閱 SQL Server 7.0 和 SQL Server 2000 聯機叢書。

         

SQL事件探查器使用介紹 作者: 朱前邦

SQL 事件探查器是SQL Server提供的一個圖形工具,通過該工具主要可以實現如下功能:

l 監視 SQL Server 執行個體的效能。

2 調試 Transact-SQL 陳述式和預存程序。

3 識別執行慢的查詢。

4 在工程開發階段,通過逐步執行語句測試 SQL 陳述式和預存程序,以確認代碼按預期運行。

5 通過捕獲生產系統中的事件並在測試系統中重播它們來解決 SQL Server 中的問題。這對測試和調試很有用,並使得使用者可以不受幹擾地繼續使用生產系統。

6 審核和複查在 SQL Server 執行個體中發生的活動。這使得安全性系統管理員得以複查任何審核事件,包括登入嘗試的成功與失敗,以及訪問語句和對象的許可權成功與失敗。

需要注意的是,運行 SQL 事件探查器時,必須確保系統至少有10 MB 的可用空間,否則SQL 事件探查器的所有功能都將停止。

一、建立跟蹤

從 “開始”菜單中的“Microsoft SQL Server”菜單中選擇“事件探查器”即可進入事件探查器主介面。我們可通過點擊工具條上的“新跟蹤”按鈕或選擇[檔案] 功能表下“建立”中的“跟蹤”來開始一個新跟蹤。此時,系統會提示我們輸入要跟蹤的資料庫所在的伺服器名、對應得帳號和密碼。這兒需要特別說明的是執行跟蹤的帳號必須是“system admin”角色成員。點“確定”後,系統便彈出如下對話方塊(圖一).

在該對話方塊的上部有四個選項卡,預設是“常規”選項,在該選項中我們可以設定跟蹤名和跟蹤模版,作為初學者我們這兒使用預設設定。

單擊“事件”選項卡進入圖二,在圖二中我們可以看到有很多供監視的事件。一般情況下,使用預設的事件即可,除非真的需要,不建議選擇所有的事件來監視。

在接下來的“資料列”選項中(圖三),我們可以選擇所捕獲的每個事件所需要儲存的資訊,同樣系統提供的預設資訊基本上就夠用了。如果系統只有一個使用者,象ApplicationName,LoginName這些資訊甚至都可以從預設的選項中移除。

二、準備測試代碼

為了示範SQL 事件探查器的功能,我先用C#寫一個小的Windows應用程式。在這個小程式的主介面上我們放一個文字框和兩個按鈕,點擊“顯示”按鈕時,應用程式會將 Customers表中CustomerID 為“ALFKI”的公司名顯示在文字框中。點“儲存”按鈕時,應用程式則會儲存修改後的新公司名,下面就是該小程式的主要代碼:

//載入資訊

private void btnLoad_Click(object sender, System.EventArgs e)

{

//資料庫連接資訊,資料庫是微軟提供的Northwind資料庫,伺服器、使用者名稱和密碼視實際情況修改

string strCon="server=james;database=Northwind;Uid=sa;Pwd=";

SqlConnection cn = new SqlConnection(strCon);

SqlCommand cmd = new SqlCommand("SELECT CompanyName FROM Customers WHERE CustomerID='ALFKI'", cn);

cn.Open();

SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read())

{

//在文字框中顯示公司名

txtCustomer.Text=dr.GetString(0).Trim();

}

}

...................................................

通常情況下,使用   SQL   事件探查器可以:    
   
  1.尋找執行最差的查詢  
     
  例如,可以建立跟蹤來捕獲與   TSQL   和   Stored   Procedure   事件類別(尤其是   RPC:Completed   和   SQL:BatchCompleted)相關的事件。在這個跟蹤內包含所有資料列,按   Duration   分組並指定事件準則。例如,如果指定事件的   Duration   至少為   1,000   毫秒,則可以跟蹤中排除已耗用時間短的事件。根據需要可以增大   Duration   的最小值。如果想一次只監視一個資料庫,為   Database   ID   事件準則指定一個值。  
   
  2.識別死結原因    
  例如,可以建立一個跟蹤來捕獲與   TSQL   和   Stored   Procedure   事件類別(RPC:Starting   和   SQL:BatchStarting)以及   Locks   事件類別(Lock:Deadlock   和   Lock:Deadlock   Chain)相關的事件。在這個跟蹤內包括所有資料列並按   Event   Class   分組。如果想一次只監視一個資料庫,為   Database   ID   事件準則指定一個值。  
   
      若要查看死結所涉及的串連,執行下列操作之一:  
   
  開啟包含捕獲的資料的跟蹤,按   ClientProcessID   將資料分組並展開死結所涉及的兩個串連。  
   
   
  將捕獲的資料儲存到一個追蹤檔案,然後開啟這個追蹤檔案兩次,使其顯示在兩個單獨的   SQL   事件探查器視窗內。按   ClientProcessID   將捕獲的資料分組,然後展開死結所涉及的進程   ID;每個死結串連都在一個單獨的視窗內。平鋪視窗以查看導致死結的事件。    
   
  3.監視預存程序的效能    
   
  例如,可以建立一個跟蹤來捕獲與   Stored   Procedure   事件類別(SP:Completed、SP:Starting、SP:StmtCompleted   和   SP:StmtStarting)和   TSQL   事件類別(SQL:BatchStarting   和   SQL:BatchCompleted)相關的事件。在這個跟蹤內包含所有資料列並按   ClientProcessID   分組。如果想一次只監視一個資料庫,為   Database   ID   事件準則指定一個值。同樣,如果想一次只監視一個預存程序,為   Object   ID   事件準則指定一個值。  
   
  4.審核   Microsoft®   SQL   Server™   活動    
   
  可以使用   SQL   事件探查器審核   SQL   Server   中的活動。例如,如果安全性系統管理員需要隨時瞭解誰登入到了伺服器,可以建立   SQL   事件探查器跟蹤,提供已登入到伺服器或從伺服器登出的使用者的完整視圖。之後,可出於法律目的使用這些資訊記錄活動,和出於技術目的使用這些資訊跟蹤違反安全性原則的行為。  
   
  若要設定   SQL   事件探查器跟蹤來跟蹤已登入到伺服器或從伺服器登出的使用者,請執行下列操作:    
   
  建立跟蹤並選擇   Audit   Login   Event。  
   
   
  若要返回適當的資訊,請指定下列資料列:    
  EventClass(預設情況下選定)  
   
  EventSubClass  
   
  LoginSID  
   
  LoginName  
   
  監視每個使用者的   Transact-SQL   活動。    
  可以建立跟蹤來捕獲與   Sessions   事件類別、ExistingConnection   和   TSQL   事件類別相關的事件。將所有資料列包含在此跟蹤內,不要指定任何事件準則,並按   DBUserName   將捕獲的事件分組。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.