共用方式為


擴充事件概觀

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric 中的 SQL 資料庫

擴充事件 (XEvents) 架構可讓使用者收集盡可能多的資料,以監視、識別或疑難排解 Fabric 中的 SQL Server、Azure SQL 資料庫、Azure SQL 受控執行個體和 SQL 資料庫中的效能。 擴充事件設定性高、輕量且能夠妥善地進行擴展。 如需詳細資訊,請參閱擴充事件架構

擴充事件會取代 SQL 追蹤與 SQL Server Profiler 功能。

若要開始使用擴充事件,請使用快速入門:擴充事件

注意

針對 Azure SQL 資料庫、Fabric 中的 SQL 資料庫和 SQL 受控執行個體, 程式碼範例可能會有所不同 ,因為目標的 event_file 檔案會儲存在 Azure 儲存體中。 如需詳細資訊,請參閱 Azure SQL 中的擴充事件

擴充事件的優勢

擴充事件是輕量型效能監視系統,其使用最少的系統資源,同時提供資料庫引擎的詳細深入檢視。 SQL Server Management Studio 提供擴充事件的圖形化使用者介面,可用於建立、修改和卸除事件工作階段,以及顯示和分析工作階段資料。 若要進一步了解 Management Studio 中的擴充事件支援,請參閱:

擴充事件概念

擴充事件是以 Windows 事件追蹤 (ETW) 的現有概念為基礎,例如事件事件取用者,並引進動作和述詞等新概念。

下表提供文件參考,以了解擴充事件中的概念。

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

擴充事件架構

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

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

擴充的事件可支援在處理序外使用事件資料。 這項資料通常會由使用者用來執行效能監視,以管理或支援產品,或由使用者用來開發產品上的應用程式,以進行偵錯。 資料會使用 SQL Server Management Studio、XEvent 分析工具、效能監視器,以及 T-SQL 或 Windows 命令列工具等工具來取用或分析。

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

  • 「擴充事件」引擎無法得知事件。 此引擎可將任何事件繫結至任何目標,因為此引擎不受到事件內容限制。 如需有關擴充的事件引擎的詳細資訊,請參閱擴充事件引擎
  • 事件會與事件取用者區隔,後者在擴充的事件中稱為 「目標」 。 這表示,任何目標都可以接收任何事件。 此外,目標可以自動耗用任何引發的事件,這樣可以記錄或提供其他事件內容。 如需詳細資訊,請參閱 擴充事件目標
  • 事件與事件發生時所要採取的動作不同。 因此,任何動作都可以與任何事件產生關聯。
  • 述詞可以動態篩選何時應該擷取事件資料。 動態篩選會增加「擴充事件」基礎結構的彈性。 如需詳細資訊,請參閱擴充事件套件

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

  • 在伺服器系統上處理事件的統一方式,同時也可讓使用者隔離特定的事件來進行疑難排解。
  • 與現有的 ETW 工具整合並支援這些工具。
  • 使用 Transact-SQL 完整設定的事件處理機制。
  • 能夠動態監視使用中處理序,同時對這些處理序有最少的影響。
  • 執行的預設系統健康工作階段,而不會有任何顯著的效能影響。 此工作階段會收集系統資料,讓您能夠用來協助排除效能問題。 如需詳細資訊,請參閱使用 system_health 工作階段

擴充事件工作

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

工作描述 文章
使用 [物件總管] 管理事件工作階段。 在物件總管中管理事件工作階段
說明如何使用可用的擴充事件目標。 擴充事件目標
描述如何檢視及重新整理目標資料。 SQL Server Management Studio 中的事件篩選條件
描述擴充事件工作階段的架構。 擴充事件工作階段
描述如何使用擴充事件工具來建立和管理擴充事件工作階段。 擴充事件工具
描述如何改變擴充事件工作階段。 更改擴充事件工作階段
描述如何取得與事件有關之欄位的資訊。 取得所有事件的欄位
描述如何在註冊的封裝中查明哪些事件可用。 延伸事件系統檢視中的 SELECT 和 JOIN 查詢操作
描述如何檢視同等於每一個 SQL 追蹤事件及其關聯資料行的「擴充事件」事件和動作。 檢視同等於 SQL 追蹤事件類別的擴充事件
描述如何將現有的 SQL 追蹤指令碼轉換為擴充事件工作階段。 將現有的 SQL 追蹤指令碼轉換為擴充事件工作階段
描述如何判斷哪些查詢持有鎖定、查詢的計畫,以及取得鎖定時的 Transact-SQL 堆疊。 判斷哪些查詢持有鎖定
描述如何識別鎖定的來源。 尋找持有最多鎖定的物件
描述如何搭配 Windows 事件追蹤來使用擴充事件,以監視系統活動。 使用擴充事件監視系統活動
使用擴充事件的目錄檢視和動態管理檢視 (DMV) 延伸事件系統檢視中的 SELECT 和 JOIN 查詢操作

擴充事件目錄檢視

擴充事件提供數個目錄檢視。 目錄檢視會提供有關事件工作階段中繼資料定義的資訊。 如需作用中事件階段作業實例的相關資訊,請參閱 延伸事件動態管理視圖

目錄檢視的名稱 描述
sys.database_event_session_actions 傳回資料庫範圍事件工作階段中每個事件的每次動作資料列。
sys.database_event_session_events 傳回資料庫範圍事件工作階段中每個事件的資料列。
sys.database_event_session_fields 針對在資料庫範圍內工作階段中已明確設定的事件和目標的每個可自訂資料行,返回一列資料。
sys.database_event_session_targets 傳回每個資料庫範圍事件會話的事件目標物件的資料列。
sys.database_event_sessions 傳回每個資料庫範圍事件工作階段的資料列。

擴充事件動態管理檢視

擴充事件提供數個動態管理檢視 (DMV)。 DMV 會傳回 作用中 (已啟動) 事件會話的相關資訊,例如會話和目標統計資料。

DMV 的名稱 描述
sys.dm_xe_database_session_event_actions 傳回資料庫範圍事件工作階段動作的相關資訊。
sys.dm_xe_database_session_events 傳回資料庫範圍事件工作階段事件的相關資訊。
sys.dm_xe_database_session_object_columns 顯示連結至資料庫範圍階段作業之物件的組態值。
sys.dm_xe_database_session_targets 傳回有關資料庫範圍的事件會話目標的資訊。
sys.dm_xe_database_sessions 針對目前資料庫中執行的每一個資料庫範圍事件工作階段傳回一列。

權限

在 Azure SQL 資料庫、Fabric 中的 SQL 資料庫、Azure SQL 受控執行個體,以及 SQL Server 2022 和更新版本中,擴充事件支援細微的許可權模型。 可授與下列權限:

CREATE ANY DATABASE EVENT SESSION
DROP ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION ADD EVENT
ALTER ANY DATABASE EVENT SESSION DROP EVENT
ALTER ANY DATABASE EVENT SESSION ADD TARGET
ALTER ANY DATABASE EVENT SESSION DROP TARGET
ALTER ANY DATABASE EVENT SESSION ENABLE
ALTER ANY DATABASE EVENT SESSION DISABLE
ALTER ANY DATABASE EVENT SESSION OPTION

如需每個權限控制措施的相關資訊,請參閱 CREATE EVENT SESSIONALTER EVENT SESSIONDROP EVENT SESSION

所有這些許可權都包含在資料庫、SQL 受控執行個體或 SQL Server 執行個體的許可權中 CONTROL 。 在 Azure SQL 資料庫中,資料庫擁有者 (dbo)、db_owner 資料庫角色的成員以及邏輯伺服器的系統管理員會保留資料庫 CONTROL 權限。 在 Azure SQL 受控執行個體和 SQL Server 中,伺服器角色的 sysadmin 成員會保留 CONTROL 執行個體的許可權。

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

針對 SQL Server 撰寫的某些 Transact-SQL 程式碼範例需要小的變更,才能在 Azure SQL 資料庫或 Fabric 中的 SQL 資料庫中執行。 這類程式碼範例的其中一個類別涉及目錄檢視,其名稱前置詞視乎資料庫引擎類型而有所差異:

  • server_ - 適用於 SQL Server 和 Azure SQL 受控執行個體的前置詞
  • database_ - Azure SQL 資料庫、Fabric 中的 SQL 資料庫和 SQL 受控執行個體的前置詞

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

Azure SQL 受控執行個體同時支援資料庫範圍工作階段與伺服器範圍工作階段。 SSMS 完全支援適用於 SQL 受控執行個體的伺服器範圍工作階段:包含所有伺服器範圍工作階段的擴充事件節點會出現在物件總管中每個受控執行個體的 [Management] 資料夾底下。

注意

建議針對 Azure SQL 受控執行個體使用伺服器範圍的事件工作階段。

資料庫範圍的事件工作階段不會顯示在適用於 Azure SQL 受控執行個體的 SSMS 的物件總管中。 在 SQL 受控執行個體上,資料庫範圍的事件工作階段只能使用 Transact-SQL 來查詢和管理。

為了示範,下表列出並比較兩個目錄檢視子集。 由於子集支援兩種不同的資料庫引擎類型,因此具有不同的名稱前置詞。

SQL Server 和 Azure SQL 受控執行個體中的名稱 Azure SQL 資料庫、Fabric 中的 SQL 資料庫和 Azure SQL 受控執行個體中的名稱
sys.server_event_session_actions
sys.server_event_session_events
sys.server_event_session_fields
sys.server_event_session_targets
sys.server_event_sessions
sys.database_event_session_actions
sys.database_event_session_events
sys.database_event_session_fields
sys.database_event_session_targets
sys.database_event_sessions