Azure SQL Database 中的擴充事件

適用于:Azure SQL資料庫

Azure SQL Database 中的擴充事件功能集是 SQL Server 和 Azure SQL 受控執行個體上強大的功能子集。

XEvents 是非正式暱稱,有時在部落格或其他非正式位置用於「擴充事件」。

有關擴充事件的其他資訊可在下列位置取得:

必要條件

本文假設您已具備下列項目的一些知識:

當選擇事件檔案做為 目標時,事先公開下列項目很有幫助:

程式碼範例

相關文章提供兩個程式碼範例:

Transact-SQL 差異

  • 當您在 SQL Server 上執行 CREATE EVENT SESSION 命令時,您使用 ON SERVER 子句。 但是在 Azure SQL Database 上,您改為使用 ON DATABASE 子句。

  • ON DATABASE 子句也適用於 ALTER EVENT SESSIONDROP EVENT SESSION Transact-SQL 命令。

  • 最佳做法是在您的 CREATE EVENT SESSIONALTER EVENT SESSION 陳述式中包含 STARTUP_STATE = ON 的事件工作階段選項。

    • = ON 值支援在由於容錯移轉而進行邏輯資料庫的重新設定之後,自動重新啟動。

新目錄檢視

擴充事件功能受到多個 目錄檢視支援。 目錄檢視會告訴您目前資料庫中使用者建立事件工作階段的 中繼資料或定義 的相關資訊。 檢視不會傳回作用中事件工作階段的執行個體的相關資訊。

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

在 Microsoft SQL Server 中,類似的目錄檢視具有包含 .server_ 而不是 .database_ 的名稱。 名稱模式類似 sys.server_event_%

新的動態管理檢視 (DMV)

Azure SQL Database 具有支援擴充事件的 動態管理檢視 (DMV) 。 DMV 會告訴您 作用中 事件工作階段的相關資訊。

DMV 的名稱 Description
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 針對範圍為目前資料庫的每個事件工作階段傳回資料列。

在 Microsoft SQL Server 中,類似的目錄檢視名稱不含 _database 名稱部分,例如:

  • sys.dm_xe_sessions 取代 sys.dm_xe_database_sessions

兩者通用的 DMV

對於擴充事件,有通用於 Azure SQL Database、Azure SQL 受控執行個體和 Microsoft SQL Server 的其他 DMV:

尋找可用擴充事件、動作和目標

若要取得可用事件、動作和目標的清單,請使用範例查詢:

SELECT
        o.object_type,
        p.name         AS [package_name],
        o.name         AS [db_object_name],
        o.description  AS [db_obj_description]
    FROM
                   sys.dm_xe_objects  AS o
        INNER JOIN sys.dm_xe_packages AS p  ON p.guid = o.package_guid
    WHERE
        o.object_type in
            (
            'action',  'event',  'target'
            )
    ORDER BY
        o.object_type,
        p.name,
        o.name;

 

您的 Azure SQL Database 事件工作階段的目標

以下是可以從 Azure SQL Database 上的事件工作階段中擷取結果的目標:

Windows 事件追蹤 (ETW) API 不適用於 Azure SQL Database 上的擴充事件。

限制

有幾個適用於 Azure SQL Database 雲端環境的安全性相關差異:

  • 擴充事件是建構在單一租用戶隔離模型的基礎上。 一個資料庫中的事件工作階段無法從另一個資料庫存取資料或事件。
  • 您無法在 master 資料庫的內容中發出 CREATE EVENT SESSION 陳述式。

權限模型

您必須擁有資料庫的控制權限,才能發出 CREATE EVENT SESSION 陳述式。 資料庫擁有者 (dbo) 有 控制 權限。

儲存體容器授權

您針對 Azure 儲存體容器產生的 SAS 權杖必須指定權限的 rwlrwl 值會提供下列權限:

  • 讀取
  • 寫入
  • List

效能考量

有大量使用擴充事件會累積超出整體系統狀況良好所允許的更多作用中記憶體的案例。 因此,Azure SQL Database 動態設定和調整事件工作階段可以累積的作用中記憶體數量的限制。 許多因素會列入動態計算。

Azure SQL Database 中的 XEvent 工作階段有可使用記憶體上限:

  • 在 DTU 購買模型的單一 Azure SQL Database 中,每個資料庫最多可使用 128 MB。 只有在進階層中才會提高到 256 MB。
  • 在 vCore 購買模型的單一 Azure SQL Database 中,每個資料庫最多可使用 128 MB。
  • 在彈性集區中,個別資料庫受限於單一資料庫的限制,且總計不能超過 512 MB。

如果您收到錯誤訊息,指出已強制執行記憶體最大值,您可以採取的一些更正動作為:

  • 執行較少的並行事件工作階段。
  • 透過事件工作階段的 CREATEALTER 陳述式,減少您在 MAX_MEMORY 子句中指定的記憶體數量。

網路延遲

事件檔案 目標在將資料保存到 Azure 儲存體 Blob 時可能會遇到網路延遲或失敗。 Azure SQL Database 中的其他事件可能會延遲,因為事件會等待網路通訊完成。 此延遲會降低您的工作負載。

  • 若要減輕這個效能風險,請避免在您的事件工作階段定義中將 EVENT_RETENTION_MODE 選項設為 NO_EVENT_LOSS