在 Azure 儲存體中建立具有 event_file 目標的事件工作階段

適用於:Azure SQL DatabaseAzure SQL 受控執行個體

本逐步解說中的高階步驟如下:

  1. 建立 Azure 儲存體帳戶,或尋找要使用的現有適當帳戶
  2. 在此儲存體帳戶中建立容器
  3. 建立具有此容器所需存取權的 SAS 權杖
  4. 建立認證,以將 SAS 權杖儲存於建立事件工作階段的資料庫或受控執行個體中
  5. 建立、開始和使用事件工作階段

建立儲存體帳戶和容器

如需如何在 Azure 儲存體中建立儲存體帳戶的詳細描述,請參閱建立儲存體帳戶。 您將了解如何使用 Azure 入口網站、PowerShell、Azure SQL、ARM 範本或 Bicep 範本來建立儲存體帳戶。

建議您使用符合下列要求的帳戶:

  • Standard general-purpose v2 帳戶。
  • 其備援類型符合建立事件工作階段的 Azure SQL 資料庫、彈性集區或受控執行個體的備援。
    • 針對本地備援 Azure SQL 資源,請使用 LRS、GRS 或 RA-GRS。 針對區域備援 Azure SQL 資源,請使用 ZRS、GZRS 或 RA-GZRS。 如需詳細資訊,請參閱 Azure 儲存體備援 \(部分機器翻譯\)。
  • 使用 Hotblob 存取層
  • 位於與 Azure SQL 資料庫、彈性集區或受控執行個體相同的 Azure 區域中。

下一步,使用 Azure 入口網站在此儲存體帳戶中建立容器。 也可以使用 PowerShell使用 Azure CLI 建立容器。

請注意您使用的儲存體帳戶容器名稱。

建立 SAS 權杖

執行事件工作階段的資料庫引擎需要儲存體容器的特定存取權。 可以藉由建立容器的 SAS 權杖來授與此存取權。 此權杖必須符合下列需求:

  • 具有 rwl (ReadWriteList) 權限
  • 具有包含事件工作階段存留期的開始時間和到期時間
  • 沒有 IP 位址限制

在 Azure 入口網站中,尋找您建立的儲存體帳戶和容器。 選取容器,然後瀏覽至 [設定] > [共用存取權杖]。 將 [權限] 設定ReadWriteList,並設定 [開始] 和 [到期] 日期和時間。 您建立的 SAS 權杖只能在此時間間隔內運作。

選取 [產生 SAS 權杖和 URL]按鈕。 SAS 權杖位於 [Blob SAS 權杖] 方塊中。 您可以複製它以在下一個步驟中使用。

重要

SAS 權杖會提供此容器的讀取和寫入存取權。 將它視為密碼或任何其他祕密進行處理。

Screenshot of the Shared Access Tokens screen for an Azure Storage container, with a generated SAS token for an example container.

建立認證以儲存 SAS 權杖

在 Azure SQL 資料庫中,您會使用資料庫範圍認證來儲存 SAS 權杖。 在 Azure SQL 受控執行個體中,您會使用伺服器範圍認證。

將 SAS 權杖儲存在資料庫範圍認證中。 使用 SSMS 或 ADS 之類的用戶端工具,開啟新的查詢視窗、連線到您建立事件工作階段的資料庫,然後貼上下列 T-SQL 批次。 請確定您已連線到您的使用者資料庫,而不是連線到 master 資料庫。

注意

執行下列 T-SQL 批次需要 CONTROL 資料庫權限,此權限由資料庫擁有者 (dbo)、資料庫角色 db_owner 的成員和邏輯伺服器的系統管理員所持有。

/*
Create a master key to protect the secret of the credential
*/
IF NOT EXISTS (
              SELECT 1
              FROM sys.symmetric_keys
              WHERE name = '##MS_DatabaseMasterKey##'
              )
CREATE MASTER KEY;

/*
(Re-)create a database scoped credential.
The name of the credential must match the URL of the blob container.
*/
IF EXISTS (
          SELECT 1
          FROM sys.database_credentials
          WHERE name = 'https://exampleaccount4xe.blob.core.windows.net/xe-example-container'
          )
    DROP DATABASE SCOPED CREDENTIAL [https://exampleaccount4xe.blob.core.windows.net/xe-example-container];

/*
The secret is the SAS token for the container. The Read, Write, and List permissions are set.
*/
CREATE DATABASE SCOPED CREDENTIAL [https://exampleaccount4xe.blob.core.windows.net/xe-example-container]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = 'sp=rwl&st=2023-10-17T23:28:32Z&se=2023-10-18T07:28:32Z&spr=https&sv=2022-11-02&sr=c&sig=REDACTED';

在執行此批次之前,請進行下列變更:

  • 在所有三個出現的 https://exampleaccount4xe.blob.core.windows.net/xe-example-container 中,以儲存體帳戶的名稱取代 exampleaccount4xe,並以容器的名稱取代 xe-example-container
  • 將子句 SECRET 中單引號之間的整個字串取代為您在上一個步驟中複製的 SAS 權杖。

建立、開始和停止事件工作階段

建立具有 SAS 權杖的認證之後,您就可以建立事件工作階段。 建立事件工作階段不需要 CONTROL 權限。 如果已存在具有正確 SAS 權杖的認證,即使您的權限集受到更多限制,仍可建立事件工作階段。 請參閱權限,了解所需的特定權限。

若要在 SSMS 中建立新的事件工作階段,請展開 [擴充事件] 節點。 此節點位於 Azure SQL 資料庫的資料庫資料夾下,以及 Azure SQL 受控執行個體中的 [管理] 資料夾底下。 以滑鼠右鍵按一下 [工作階段] 資料夾,然後選取 [新增工作階段...]。在 [一般] 頁面上,輸入工作階段的名稱,在此範例中為 example-session。 在 [事件] 頁面上,選取要新增至工作階段的一個或多個事件。 在此範例中,我們選取了 sql_batch_starting 事件。

Screenshot of the New Session SSMS dialog showing the event selection page with the sql_batch_starting event selected.

在 [資料儲存體] 頁面上,選取 event_file 作為目標型別,然後在 [儲存體 URL] 方塊中貼上儲存體容器的 URL。 在此 URL 結尾輸入斜線 (/),後面接著檔案 (blob) 名稱。 在我們的範例中,Blob 名稱為 example-session.xel,而整個 URL 為 https://exampleaccount4xe.blob.core.windows.net/xe-example-container/example-session.xel

注意

針對 SQL 受控執行個體,請使用 [指令碼] 按鈕來建立工作階段的 T-SQL 指令碼,而不是貼上 [資料儲存體] 頁面上的儲存體容器 URL。 將容器 URL 指定為自變數 filename 的值,類似於下列 SQL 受控執行個體範例,然後執行指令碼來建立工作階段。

Screenshot of the New Session SSMS dialog showing the data storage selection page with an event_file target selected and an entered storage URL.

現在已設定工作階段,您可以選取 [指令碼] 按鈕來建立工作階段的 T-SQL 指令碼,以便稍後儲存。 以下是範例工作階段的指令碼:

CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.event_file(SET filename=N'https://exampleaccount4xe.blob.core.windows.net/xe-example-container/example-session.xel')
GO

選取 [確定] 以建立工作階段。

在 [物件總管] 中,展開 [工作階段] 資料夾,以查看您所建立的事件工作階段。 根據預設,工作階段不會在建立時啟動。 若要啟動工作階段,請以滑鼠右鍵按一下工作階段名稱,然後選取 [啟動工作階段]。 在工作階段執行之後,您稍後可採用類似做法,選取 [停止工作階段] 將其停止。

當 T-SQL 批次在此資料庫或受控執行個體中執行時,工作階段會將事件寫入到 xe-example-container 儲存體容器中的 example-session.xel Blob。

若要停止工作階段,請以滑鼠右鍵按一下 [物件總管],然後選取 [停止工作階段]。

檢視事件資料

您可以在 SQL Server Management Studio (SSMS) 事件檢視器 UI 中檢視事件資料,其中可以使用篩選和彙總來分析所擷取的資料。 如需在 SSMS 中使用事件檢視器的詳細資訊,請參閱在 SSMS 中檢視事件資料

從 Azure 儲存體下載下載 xel 檔案

提示

如果您使用 SSMS v19.2 或更新版本,就不需要如本節所述下載 xel 檔案。 在這些版本中,SSMS 會直接從 Azure 儲存體讀取每個工作階段的 xel 檔案。 如需詳細資訊,請參閱改善 Azure SQL 中的擴充事件部落格。

從儲存體容器下載工作階段的 xel Blob,並將其儲存為本機檔案。 在 Azure 入口網站中,尋找您所使用的儲存體帳戶,選取 [資料儲存體] 下的 [容器],然後選取您為事件工作階段建立的容器。 工作階段的 Blob 以工作階段名稱做為其名稱的第一個部分,並加上數值後置詞。 選取省略號 (...) 以顯示 Blob 的特色選單,然後選取 [下載]。

您可以安裝 [Azure 儲存體總管],在一個作業中下載多個 xel Blob。

下載 xel 檔案之後,在 SSMS 中開啟它。 在 [SSMS] 主功能表上,移至 [檔案],然後選取 [開啟]。 如果您有單一 xel 檔案,請選取 [檔案...],然後瀏覽至您下載的檔案。 如果您有相同事件工作階段產生的多個 xel 檔案 (稱為換用檔案),您可以使用 [合併擴充事件檔案... ] 對話方塊,在事件檢視器中開啟所有檔案。

使用 T-SQL 檢視事件資料

若要使用 T-SQL 讀取事件工作階段資料,請使用 sys.fn_xe_file_target_read_file() 函式。 若要在與建立事件工作階段時不同的資料庫或受控執行個體中使用此函式,請建立認證,向具有事件 Blob 的儲存體容器提供資料庫引擎存取權。

如需更詳細的逐步解說,請參閱在 SSMS 中建立事件工作階段