適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric プレビューの SQL データベース
SQL Server 拡張イベント セッションは、拡張イベント エンジンをホストしている SQL Serverデータベースエンジン プロセス内で作成されます。 拡張イベント インフラストラクチャとその処理を理解するには、拡張イベント セッションの次の側面に注目します。
セッション状態。
CREATE EVENT SESSIONステートメントおよびALTER EVENT SESSIONステートメントを実行したときの拡張イベント セッションの各種の状態を表します。セッションの内容と特性。 拡張イベント セッションの内容 (ターゲット、イベントなど) と、これらのオブジェクトがセッション内またはセッション間でどのように関係しているかを表します。
セッション状態
拡張イベント セッションの各種の状態を次の図に示します。
前の図を見ると、イベント セッションに対して異なるデータ定義言語 DDL コマンドが発行されたときに、セッション状態が変化していることがわかります。 このような状態の変化について次の表で説明します。
| 図ラベル | DDL ステートメント | 説明 |
|---|---|---|
Create |
CREATE EVENT SESSION |
CREATE EVENT SESSION によって提供されたメタデータを含むセッション オブジェクトがホスト プロセスによって作成されます。 ホスト プロセスは、セッション定義を検証し、ユーザーの権限レベルを検証した後、メタデータを master データベースに格納します。 このときセッションはまだアクティブではありません。 |
Alter |
$ | ホスト プロセスによってセッションが開始されます。 ホスト プロセスは、格納されているメタデータを読み取って、セッション定義を検証し、ユーザーの権限レベルを検証して、セッションを作成します。 イベントやターゲットなどのセッション オブジェクトが読み込まれ、イベント処理がアクティブになります。 |
Alter |
$ | ホスト プロセスによってアクティブなセッションが停止されます。ただし、メタデータは保持されます。 |
Drop |
DROP EVENT SESSION |
Drop (DROP SESSION)では、セッションがアクティブかどうかに応じて、セッションのメタデータを削除するか、メタデータを削除した上でアクティブなセッションを終了します。 |
セッションの内容と特性
拡張イベント セッションには暗黙的な境界があり、あるセッションの構成によって、別のセッションの構成が変更されることはありません。 ただし、イベントまたはターゲットの種類を複数のセッションで使用することは可能です。
次の図は、セッションの内容、およびパッケージとセッションの関係を示しています。
次の点を覚えておく必要があります。
- パッケージ オブジェクトとセッションのマッピングは多対多であり、つまり、特定の種類のオブジェクトは複数のセッションに表示されることができ、また、セッションには複数のオブジェクトが含まれることができます。
- 同じイベント (イベント 1) またはターゲットの種類 (ターゲット 1) を複数のセッションで使用できる。
セッションには次の特徴があります。
- アクションおよび述語は、セッション単位でイベントにバインドされる。 たとえば、アクション 1 および述語 Z を持つセッション A のイベント 1 は、アクション 2 とアクション 3 を持ち、述語を持たないセッション B のイベント 1 には一切影響しません。
- セッションには、バッファリングとディスパッチおよび因果関係の追跡を処理するためのポリシーがアタッチされる。
バッファリングとは、イベント セッションの実行中にイベント データをどのように格納するかをいいます。 イベント データに使用するメモリ サイズやイベントの削除ポリシーは、バッファリング ポリシーによって指定されます。 ディスパッチとは、ターゲットによって処理される前のイベントがバッファー内に存続する時間のことです。
因果関係の追跡は、複数のタスクにわたって作業を追跡する機能です。 因果関係の追跡を有効にした場合、発生したイベントには、それぞれシステム全体を通じて一意のアクティビティ ID が割り当てられます。 アクティビティ ID は、GUID 値 (特定のタスクに対して割り当てられ、すべてのイベントを通じて変化しない) とシーケンス番号 (イベントが発生するたびにインクリメントされる) の組み合わせです。 あるタスクが原因で別のタスクで作業が必要になった場合、親のアクティビティ ID が子のタスクに送信されます。 子のタスクは、イベントの初回発生時に親のアクティビティ ID を出力します。
タイム バインド イベント セッション
SQL Server 2025 (17.x) Preview 以降では、指定した時間が経過すると自動的に停止するイベント セッションを作成できます。 これにより、セッションが間違って無期限に実行され、リソースが消費され、大量のデータが生成される可能性がある状況を回避できます。
セッションによって生成されるイベント データが大量の場合、タイム バインド イベント セッションを使用すると、特定の期間、より小さい対象の診断データをキャプチャできます。 タイム バインド イベント セッションは、手動で開始することも、任意の時点でスケジュールされたジョブを使用して開始することもできます。また、セッションが無期限に実行されなくなることが保証されます。
イベント セッションを期限付きにするには、セッションを作成または変更するときに、 MAX_DURATION 引数を指定します。 詳細については、「 CREATE EVENT SESSION 」および 「ALTER EVENT SESSION」を参照してください。
他のイベント セッションと同様に、 ALTER EVENT SESSION ... STATE = STOP ステートメントを使用して、最大継続時間が経過する前に、期限付きセッションを停止できます。 セッションが再び開始された場合、 MAX_DURATION で指定された期間全体が、セッションが自動的に停止される前に再度経過する必要があります。
ALTER EVENT SESSIONを使用して既存のイベント セッションを変更し、別の最大期間を指定するか、MAX_DURATION = UNLIMITEDを指定して削除することもできます。
MAX_DURATION設定を変更するには、セッションを停止する必要があります。
イベント セッションが期限付きの場合、sys.server_event_sessions カタログ ビューのmax_duration列には、セッションの最大期間が秒単位で表示されます。 値が 0 の場合、イベント セッションの継続時間は無制限です。