擴充事件概觀

適用于:SQL Server (所有支援的版本) Azure SQL Database Azure SQL 受控執行個體

擴充事件架構可讓使用者盡可能收集或少量的資料,以針對SQL Server、Azure SQL資料庫和Azure SQL 受控執行個體中的效能問題進行疑難排解或識別。 擴充事件高度可設定、輕量型且非常妥善調整。 如需詳細資訊,請參閱 擴充事件架構

擴充事件會取代已被取代的SQL 追蹤和SQL Server Profiler功能。

提供 XEvents 試用:快速入門:SQL Server中的擴充事件

注意

Azure SQL Database 僅支援資料庫範圍的會話。 瞭解Azure SQL Database 和 SQL 受管理執行個體 的程式碼範例有何差異,以及Azure SQL資料庫中擴充事件的詳細資訊。

SQL Server 擴充事件的優點

「擴充事件」是一種使用小量效能資源的一種輕量型效能監視系統。 SQL Server Management Studio提供擴充事件的圖形化使用者介面,以建立和修改會話,以及顯示和分析會話資料。 您可以在這裡深入瞭解這些延伸模組:

擴充事件概念

SQL Server擴充事件是以現有概念為基礎,例如事件或事件取用者、使用 Windows 事件追蹤的概念,並引進新的概念。

下表描述擴充事件的概念。

主題 描述
SQL Server 擴充的事件套件 描述包含物件的「擴充事件」套件。 當「擴充事件」工作階段在執行時,系統會使用這些物件來取得和處理資料。
SQL Server 擴充的事件目標 描述事件工作階段期間可以接收資料的事件取用者。
SQL Server 擴充的事件引擎 描述可實作和管理擴充事件工作階段的引擎。
SQL Server 擴充的事件工作階段 描述擴充事件工作階段。

擴充事件架構

「擴充事件」是我們對用於伺服器系統的一般事件處理系統的稱呼。 擴充事件基礎結構支援來自SQL Server的資料相互關聯,而且在某些情況下,作業系統和資料庫應用程式的資料相互關聯。 在作業系統案例中,擴充事件輸出必須導向至 Windows 事件追蹤 (ETW) 。 ETW 可將事件資料與作業系統或應用程式事件資料相互關聯。

所有應用程式都有執行點,這些執行點在應用程式內部和外部都很實用。 在應用程式內,可以使用工作最初執行期間所收集的資訊將非同步處理加入佇列。 在應用程式外,執行點會提供資訊給監視公用程式。 該資訊是關於受監視應用程式的行為和效能特性。

擴充的事件可支援在處理序外使用事件資料。 使用者通常會透過執行效能監視或使用者針對偵錯目的開發產品上的應用程式,來管理或支援產品使用此資料。 使用 XEvent Profiler 和 效能監視器、T-SQL 或 Windows 命令列工具等工具來取用或分析資料。

「擴充事件」具有下列重要的設計層面:

  • 「擴充事件」引擎無法得知事件。 此引擎可將任何事件繫結至任何目標,因為此引擎不受到事件內容限制。 如需有關擴充的事件引擎的詳細資訊,請參閱< SQL Server Extended Events Engine>。

  • 事件會與事件取用者區隔,後者在擴充的事件中稱為 「目標」 。 這表示,任何目標都可以接收任何事件。 此外,目標可以自動耗用任何引發的事件,這樣可以記錄或提供其他事件內容。 如需詳細資訊,請參閱< SQL Server Extended Events Targets>。

  • 事件與事件發生時所要採取的動作不同。 因此,任何動作都可以與任何事件產生關聯。

  • 述詞可以動態篩選何時應該擷取事件資料。 動態篩選會增加「擴充事件」基礎結構的彈性。 如需詳細資訊,請參閱< SQL Server Extended Events Packages>。

擴充的事件可以同步產生事件資料 (以及非同步處理該資料),這樣可為事件處理提供彈性的方案。 此外,擴充的事件還提供下列功能:

  • 在伺服器系統上處理事件的統一方式,同時也可讓使用者隔離特定的事件來進行疑難排解。

  • 與現有的 ETW 工具整合並支援這些工具。

  • 以 Transact-SQL 為基礎的完全可設定事件處理機制。

  • 能夠動態監視使用中處理序,同時對這些處理序有最少的影響。

  • 執行的預設系統健康工作階段,而不會有任何顯著的效能影響。 此工作階段會收集系統資料,讓您能夠用來協助排除效能問題。 如需詳細資訊,請參閱 使用 system_health 工作階段

擴充事件工作

使用 Management Studio 或 Transact-SQL 來執行 Transact-SQL 資料定義語言 (DDL) 語句、取用動態管理檢視和函式或目錄檢視,您可以為SQL Server環境建立簡單或複雜的SQL Server擴充事件疑難排解解決方案。

工作描述 發行項
使用 [物件總管] 管理事件工作階段。 在物件總管中管理事件工作階段
描述如何建立擴充事件工作階段。 建立擴充事件工作階段
描述如何檢視及重新整理目標資料。 進階檢視 SQL Server 中擴充事件的目標資料
描述如何使用擴充事件工具來建立和管理您的SQL Server擴充事件會話。 擴充事件工具
描述如何改變擴充事件工作階段。 更改擴充事件工作階段
描述如何取得與事件有關之欄位的資訊。 取得所有事件的欄位
描述如何在註冊的封裝中查明哪些事件可用。 檢視已註冊之套件的事件
描述如何判斷哪些擴充事件目標可在註冊的封裝中使用。 檢視已註冊之套件的擴充事件目標
描述如何檢視同等於每一個 SQL 追蹤事件及其關聯資料行的「擴充事件」事件和動作。 檢視同等於 SQL 追蹤事件類別的擴充事件
描述當您在 CREATE EVENT SESSION 或 ALTER EVENT SESSION 中使用 ADD TARGET 引數時,如何尋找可以設定的參數。 取得 ADD TARGET 引數的可設定參數
描述如何將現有的 SQL 追蹤指令碼轉換為擴充事件工作階段。 將現有的 SQL 追蹤指令碼轉換為擴充事件工作階段
描述如何判斷哪些查詢會保留鎖定、查詢的計畫,以及取得鎖定時的 Transact-SQL 堆疊。 判斷哪些查詢持有鎖定
描述如何識別阻礙資料庫效能的鎖定來源。 尋找持有最多鎖定的物件
描述如何搭配 Windows 事件追蹤來使用擴充事件,以監視系統活動。 使用擴充事件監視系統活動
針對擴充事件使用目錄檢視和動態管理檢視 (DMV) SQL Server 擴充事件系統檢視表中的 SELECT 和 JOIN

使用下列 Transact-SQL (T-SQL) 查詢來列出所有可能的事件及其描述:

SELECT
     obj1.name as [XEvent-name],
     col2.name as [XEvent-column],
     obj1.description as [Descr-name],
     col2.description as [Descr-column]
  FROM
               sys.dm_xe_objects        as obj1
      JOIN sys.dm_xe_object_columns as col2 on col2.object_name = obj1.name
  ORDER BY
    obj1.name,
    col2.name

Azure SQL 資料庫和SQL 受管理執行個體的程式碼範例可能會有所不同

針對內部部署SQL Server撰寫的一些 Transact-SQL 程式碼範例,需要在雲端中執行小型變更。 這類程式碼範例的其中一個類別牽涉到系統檢視,而系統檢視的名稱前置詞在這兩個資料庫系統之間略有不同:

  • server_   -   SQL Server和Azure SQL 受控執行個體的前置詞
  •   -   database_Azure SQL Database 和 SQL 受管理執行個體 的前置詞

Azure SQL Database 僅支援資料庫範圍的會話。 SQL Server Management Studio (SSMS) 完全支援Azure SQL資料庫的資料庫範圍會話:包含資料庫範圍會話的擴充事件節點會出現在物件總管中的每個資料庫底下。

Azure SQL 受控執行個體支援資料庫範圍的會話和伺服器範圍的會話。 建議針對受控實例使用伺服器範圍的會話。 SSMS 完全支援SQL 受管理執行個體的伺服器範圍會話:包含所有伺服器範圍會話的擴充事件節點會出現在 物件總管中每個受控實例的管理資料夾下。

注意

Azure SQL 受控執行個體的 SSMS 中的物件總管不會顯示資料庫範圍的會話。 使用受控實例時,只能使用 Transact-SQL 查詢及管理資料庫範圍的會話。

為了示範,下表列出並比較兩個系統檢視子集。 為求簡潔,這些子集限制為同時包含字串 _event 的檢視名稱。 由於子集來自兩個不同資料庫系統,因此具有不同的名稱前置詞。

來自SQL Server的名稱 雲端服務中的名稱
server_event_notifications
server_event_session_actions
server_event_session_events
server_event_session_fields
server_event_session_targets
server_event_sessions
server_events
server_trigger_events
database_event_session_actions
database_event_session_events
database_event_session_fields
database_event_session_targets
database_event_sessions

上表中的兩份清單在 2022 年 3 月是精確的。 但這裡的資料表內容可能已經過時,因為其內容不會在此處進行維護。 如需精確的清單,請參閱下列 T-SQL SELECT 語句。

SELECT name
    FROM sys.all_objects
    WHERE
        (name LIKE 'database\_%' { ESCAPE '\' } OR
         name LIKE 'server\_%' { ESCAPE '\' })
        AND name LIKE '%\_event%' { ESCAPE '\' }
        AND type = 'V'
    ORDER BY name;

另請參閱

下一步