適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
Microsoft Fabric 中的 SQL 資料庫
擴充事件工作階段是在裝載擴充事件引擎的 SQL Server 資料庫引擎處理序中建立。 延伸事件工作階段的下列各個層面,有助於了解延伸事件基礎架構及其發生的處理程序:
工作階段狀態 執行
CREATE EVENT SESSION和ALTER EVENT SESSION陳述式時,擴充事件工作階段所處的不同狀態。工作階段內容與特徵。 擴充事件工作階段的內容,例如目標和事件,以及這些物件如何在工作階段內或是工作階段之間相互產生關聯。
工作階段狀態
下圖顯示擴充事件工作階段的各種狀態。
在上圖中,請注意在針對事件工作階段發出不同的資料定義語言 (DDL) 命令時,該工作階段狀態就會變更。 下表說明這些狀態變更所代表的意義。
| 圖例標籤 | DDL 敘述 | 描述 |
|---|---|---|
Create |
CREATE EVENT SESSION |
主機處理序會建立工作階段物件,此物件包含由 CREATE EVENT SESSION 所提供的中繼資料。 主機處理序會驗證工作階段定義、驗證使用者權限等級,並將中繼資料儲存在 master 資料庫內。 此時,工作階段不在作用中。 |
Alter |
ALTER EVENT SESSION, STATE=START |
主機處理序會啟動工作階段。 主機處理序會讀取儲存的中繼資料、驗證工作階段定義、驗證使用者權限等級,並建立工作階段。 系統會載入工作階段物件(如事件和目標),且事件處理處於啟用狀態。 |
Alter |
ALTER EVENT SESSION, STATE=STOP |
主機處理序會停止作用中的工作階段,但保留中繼資料。 |
Drop |
DROP EVENT SESSION |
視工作階段是否為使用中而定,刪除 (DROP SESSION) 會刪除中繼資料並關閉目前使用中的工作階段,或刪除工作階段中繼資料。 |
工作階段內容和特性
擴充事件工作階段具有隱含的界限,在此界限下,某個工作階段的組態不會變更另一個工作階段的組態。 但是,這些界限並不會防止事件或目標型別在一個以上的工作階段內使用。
下圖顯示工作階段內容以及封裝與工作階段之間的關聯性。
參照前圖,請注意:
- 套件物件與工作階段之間的對應是多對多對應,這表示特定類型的物件可以出現在數個工作階段中,且工作階段可以包含數個物件。
- 相同的事件 (事件 1) 或目標型別 (目標 1) 可在一個以上的工作階段內使用。
工作階段具有下列特性:
- 根據各個工作階段將動作和述詞繫結至事件。 如果您在工作階段 A 中有事件 1,且其包含動作 1 和條件 Z,這完全不會影響您在工作階段 B 中擁有事件 1,且其包含動作 2 和動作 3,並且沒有條件。
- 策略會附加到工作階段,以處理緩衝、分派和因果關係追蹤。
緩衝是指事件工作階段執行期間如何儲存事件資料。 緩衝原則會指定用於事件資料的記憶體數量及事件的遺失原則。 分派指的是事件在傳送至目標進行處理之前停留在緩衝區內的持續時間。
因果追蹤會跨多個任務追蹤工作內容。 當啟用因果追蹤時,每一個引發的事件在系統中都有唯一的活動識別碼。 此活動識別碼是由 GUID 值和序號組成;其中,GUID 值在某項工作的所有事件中皆維持不變,而序號則會在每次觸發事件時遞增。 當某個工作導致另一個工作執行時,父工作的活動識別碼會傳送至子工作。 子任務在第一次觸發事件時,會輸出父任務的活動識別碼。
時間受限的活動會期
在 Azure SQL Database、Azure SQL 受控執行個體,以及從 SQL Server 2025(17.x)開始,你可以建立一個事件會話,並在指定時間後自動停止。 這有助於防止會話因意外而無限期運行,消耗資源並可能導致產生大量的資料。
當工作階段所產生的事件資料大量時,時間限制事件工作階段可協助您在特定期間擷取較小的目標診斷資料。 您可以手動啟動有時間限制的事件工作階段,或在您選擇的時間使用排程工作,並保證工作階段不會無限期地執行。
若要使事件工作階段具有時間限制,請在建立或修改工作階段時指定 MAX_DURATION 引數。 如需詳細資訊,請參閱 CREATE EVENT SESSION 和 ALTER EVENT SESSION。
就像任何事件會話一樣,您可以使用 ALTER EVENT SESSION ... STATE = STOP 陳述式在時間限制的最大持續時間過去之前停止工作階段。 如果工作階段再次啟動,則在工作階段自動停止之前,必須再次經歷 指定的 MAX_DURATION 整個持續時間。
您也可以使用 ALTER EVENT SESSION 修改現有的事件會話,以指定不同的最大持續時間,或透過指定 MAX_DURATION = UNLIMITED 來移除它。 若要修改 MAX_DURATION 設定,必須停止會話。
若事件會話為時間限制,max_durationsys.server_event_sessions與目錄檢視sys.database_event_sessions欄位顯示該會話的最大持續時間(秒數)。 如果值為零,則事件工作階段的持續時間不受限制。