拡張イベント セッション

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SQL Server 拡張イベント セッションは、拡張イベント エンジンをホストしている SQL Serverデータベースエンジン プロセス内で作成されます。 拡張イベント インフラストラクチャとその処理を理解するには、拡張イベント セッションの次の側面に注目します。

  • セッション状態。 CREATE EVENT SESSION ステートメントおよび ALTER EVENT SESSION ステートメントを実行したときの拡張イベント セッションの各種の状態を表します。

  • セッションの内容と特性。 拡張イベント セッションの内容 (ターゲット、イベントなど) と、これらのオブジェクトがセッション内またはセッション間でどのように関係しているかを表します。

セッション状態

拡張イベント セッションの各種の状態を次の図に示します。

Diagram showing Extended Events session state.

前の図を見ると、イベント セッションに対して異なるデータ定義言語 DDL コマンドが発行されたときに、セッション状態が変化していることがわかります。 このような状態の変化について次の表で説明します。

図ラベル DDL ステートメント 説明
作成 CREATE EVENT SESSION CREATE EVENT SESSION によって提供されたメタデータを含むセッション オブジェクトがホスト プロセスによって作成されます。 ホスト プロセスは、セッション定義を検証し、ユーザーの権限レベルを検証した後、メタデータを master データベースに格納します。 このときセッションはまだアクティブではありません。
Alter ALTER EVENT SESSION, STATE=START ホスト プロセスによってセッションが開始されます。 ホスト プロセスは、格納されているメタデータを読み取って、セッション定義を検証し、ユーザーの権限レベルを検証して、セッションを作成します。 イベントやターゲットなどのセッション オブジェクトが読み込まれ、イベント処理がアクティブになります。
Alter ALTER EVENT SESSION, STATE=STOP ホスト プロセスによってアクティブなセッションが停止されます。ただし、メタデータは保持されます。
Drop DROP EVENT SESSION Drop (DROP SESSION)では、セッションがアクティブかどうかに応じて、セッションのメタデータを削除するか、メタデータを削除した上でアクティブなセッションを終了します。

セッションの内容と特性

拡張イベント セッションには暗黙的な境界があり、あるセッションの構成によって、別のセッションの構成が変更されることはありません。 ただし、イベントまたはターゲットの種類を複数のセッションで使用することは可能です。

次の図は、セッションの内容、およびパッケージとセッションの関係を示しています。

Diagram showing object coexistence and sharing in sessions.

次の点を覚えておく必要があります。

  • パッケージ オブジェクトとセッションのマッピングは多対多であり、つまり、特定の種類のオブジェクトは複数のセッションに表示されることができ、また、セッションには複数のオブジェクトが含まれることができます。
  • 同じイベント (イベント 1) またはターゲットの種類 (ターゲット 1) を複数のセッションで使用できる。

セッションには次の特徴があります。

  • アクションおよび述語は、セッション単位でイベントにバインドされる。 たとえば、アクション 1 および述語 Z を持つセッション A のイベント 1 は、アクション 2 とアクション 3 を持ち、述語を持たないセッション B のイベント 1 には一切影響しません。
  • セッションには、バッファリングとディスパッチおよび因果関係の追跡を処理するためのポリシーがアタッチされる。

バッファリングとは、イベント セッションの実行中にイベント データをどのように格納するかをいいます。 イベント データに使用するメモリ サイズやイベントの削除ポリシーは、バッファリング ポリシーによって指定されます。 ディスパッチとは、ターゲットによって処理される前のイベントがバッファー内に存続する時間のことです。

因果関係の追跡は、複数のタスクにわたって作業を追跡する機能です。 因果関係の追跡を有効にした場合、発生したイベントには、それぞれシステム全体を通じて一意のアクティビティ ID が割り当てられます。 アクティビティ ID は、GUID 値 (特定のタスクに対して割り当てられ、すべてのイベントを通じて変化しない) とシーケンス番号 (イベントが発生するたびにインクリメントされる) の組み合わせです。 あるタスクが原因で別のタスクで作業が必要になった場合、親のアクティビティ ID が子のタスクに送信されます。 子のタスクは、イベントの初回発生時に親のアクティビティ ID を出力します。