適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
収集するイベント、イベント セッションターゲット、およびイベント セッション オプションを識別する拡張イベント セッションを作成します。
構文
CREATE EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
<event_definition> [ , ...n ]
[ <event_target_definition> [ , ...n ] ]
[ WITH ( <event_session_options> [ , ...n ] ) ]
}
;
<event_definition>::=
{
ADD EVENT [event_module_guid].event_package_name.event_name
[ ( {
[ SET { event_customizable_attribute = <value> [ , ...n ] } ]
[ ACTION ( { [event_module_guid].event_package_name.action_name [ , ...n ] } ) ]
[ WHERE <predicate_expression> ]
} ) ]
}
<predicate_expression> ::=
{
[ NOT ] <predicate_factor> | { ( <predicate_expression> ) }
[ { AND | OR } [ NOT ] { <predicate_factor> | ( <predicate_expression> ) } ]
[ , ...n ]
}
<predicate_factor>::=
{
<predicate_leaf> | ( <predicate_expression> )
}
<predicate_leaf>::=
{
<predicate_source_declaration> { = | < > | != | > | >= | < | <= } <value>
| [event_module_guid].event_package_name.predicate_compare_name ( <predicate_source_declaration> , <value> )
}
<predicate_source_declaration>::=
{
event_field_name | ( [event_module_guid].event_package_name.predicate_source_name )
}
<value>::=
{
number | 'string'
}
<event_target_definition>::=
{
ADD TARGET [event_module_guid].event_package_name.target_name
[ ( SET { target_parameter_name = <value> [ , ...n ] } ) ]
}
<event_session_options>::=
{
[ MAX_MEMORY = size [ KB | MB ] ]
[ [ , ] EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } ]
[ [ , ] MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE } ]
[ [ , ] MAX_EVENT_SIZE = size [ KB | MB ] ]
[ [ , ] MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU } ]
[ [ , ] TRACK_CAUSALITY = { ON | OFF } ]
[ [ , ] STARTUP_STATE = { ON | OFF } ]
[ [ , ] MAX_DURATION = { <time duration> { SECONDS | MINUTES | HOURS | DAYS } | UNLIMITED } ]
}
引数
event_session_name
イベント セッションのユーザー定義名。 event_session_name は英数字で、最大 128 文字で、SQL Server のインスタンス内で一意である必要があり、 データベース識別子の規則に準拠している必要があります。
ON { SERVER |DATABASE }
イベント セッションがサーバーまたはデータベースのコンテキスト内にあるかどうかを判断します。
Azure SQL DatabaseおよびMicrosoft FabricのSQLデータベースには DATABASEが必要です。
ADD EVENT [event_module_guid]。event_package_name。event_name
イベント セッションに関連付けるイベント。次の場所があります。
- event_module_guid は、イベントを含むモジュールの GUID です。
- event_package_name は、イベントを含むパッケージです。
- event_name はイベント名です。
使用可能なイベントは、次のクエリを実行して見つけることができます。
SELECT o.name AS event_name,
o.description AS event_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'event'
ORDER BY event_name ASC;
SET { event_customizable_attribute = <値> [ ,...n ] }
イベントのカスタマイズ可能な属性。
特定のイベントのカスタマイズ可能な属性は、次のクエリを実行することで見つけることができます。
SELECT object_name,
name AS column_name,
type_name,
column_value,
description
FROM sys.dm_xe_object_columns
WHERE object_name = 'event-name-placeholder'
AND column_type = 'customizable'
ORDER BY column_name ASC;
ACTION ( { [event_module_guid]。event_package_name。action_name [ ,...n ] })
イベントに関連付けるアクション。次の場所があります。
- event_module_guid は、アクションを含むモジュールの GUID です。
- event_package_name アクションを含むパッケージです。
- action_name はアクションの名前です。
使用可能なアクションは、次のクエリを実行することで確認できます。
SELECT o.name AS action_name,
o.description AS action_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'action'
ORDER BY action_name ASC;
どこ <predicate_expression>
イベントを処理する必要があるかどうかを判定するために使用する述語式を指定します。 <predicate_expression> が true の場合、イベントは、セッションのアクションおよびターゲットによってさらに処理されます。 <predicate_expression>が false の場合、イベントは削除され、追加のアクションとターゲット処理が回避されます。 各述語式は 3,000 文字に制限されています。
event_field_name
述語ソースを識別するイベント フィールドの名前。
イベントのフィールドは、次のクエリを実行して見つけることができます。
SELECT oc.name AS field_name,
oc.type_name AS field_type,
oc.description AS field_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
INNER JOIN sys.dm_xe_object_columns AS oc
ON o.name = oc.object_name
AND
o.package_guid = oc.object_package_guid
WHERE o.object_type = 'event'
AND
o.name = 'event-name-placeholder'
AND
oc.column_type = 'data'
ORDER BY field_name ASC;
[event_module_guid]。event_package_name。predicate_source_name
次の場所にあるグローバル述語ソースの名前。
- event_module_guid は、イベントを含むモジュールの GUID です。
- event_package_name は、述語ソース オブジェクトを含むパッケージです。
- predicate_source_name は述語ソースの名前です。
述語ソースは、次のクエリを実行して見つけることができます。
SELECT o.name AS predicate_source_name,
o.description AS predicate_source_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_source'
ORDER BY predicate_source ASC;
[event_module_guid].event_package_name.predicate_compare_name
述語比較子オブジェクトの名前。ここで次のようになります。
- event_module_guid は、イベントを含むモジュールの GUID です。
- event_package_name は、述語比較子オブジェクトを含むパッケージです。
- predicate_compare_name 述語比較子名です。
述語比較子は、次のクエリを実行して見つけることができます。
SELECT o.name AS predicate_comparator_name,
o.description AS predicate_comparator_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_compare'
ORDER BY predicate_comparator ASC;
番号
64 ビット整数として表すことができる任意の数値型。
'string'
述語比較子で必要な ANSI または Unicode 文字列。 述語比較関数に対しては、暗黙の文字列型変換は行われません。 予期しない型の値を渡すと、エラーが発生します。
ADD TARGET [event_module_guid]。event_package_name。target_name
イベント セッションに関連付けるターゲットを指定します。
- event_module_guid は、ターゲットを含むモジュールの GUID です。
- event_package_name は、ターゲットを含むパッケージです。
- target_name はターゲット名です。
使用可能なターゲットは、次のクエリを実行して見つけることができます。
SELECT o.name AS target_name,
o.description AS target_description,
o.capabilities_desc,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'target'
ORDER BY target_name ASC;
イベント セッションには、0 個、1 個、または多数の ターゲットを含めることができます。 イベント セッションに追加されるすべてのターゲットは異なる必要があります。 たとえば、event_file ターゲットが既にあるセッションに 2 つ目のevent_file ターゲットを追加することはできません。
一般的に使用されるターゲットの使用例など、詳細については、「 拡張イベント ターゲット」を参照してください。
SET { target_parameter_name = <値> [ , ...n ] }
ターゲット パラメーターを設定します。
すべてのターゲット パラメーターとその説明を表示するには、次のクエリを実行し、 target-name-placeholder をターゲット名 ( event_file、 ring_buffer、 histogramなど) に置き換えます。
SELECT name AS target_parameter_name,
column_value AS default_value,
description
FROM sys.dm_xe_object_columns
WHERE column_type = 'customizable'
AND object_name = 'target-name-placeholder';
重要
リング バッファー ターゲットを使用している場合は、XML 出力のデータ切り捨てを回避するために、 MAX_MEMORYtarget パラメーター ( MAX_MEMORYsession パラメーターとは異なる) を 1,024 KB 以下に設定することをお勧めします。
ターゲットの種類の詳細については、「 拡張イベント ターゲット」を参照してください。
( <event_session_options> [ ,...n ] )
イベント セッションで使用するオプションを指定します。
MAX_MEMORY = size [ KB |MB ]
イベントのバッファリング用にセッションに割り当てる最大メモリ容量を指定します。 既定値は 4 MB です。size は、キロバイト (KB) またはメガバイト (MB) を示す整数値です。 最大量は 2 GB (2,048 MB) を超えることはできません。 ただし、GB 範囲のメモリ値を使用することはお勧めしません。
EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS |ALLOW_MULTIPLE_EVENT_LOSS |NO_EVENT_LOSS }
イベントの削除を処理するために使用するイベント保有モードを指定します。
ALLOW_SINGLE_EVENT_LOSS
セッションからイベントを削除できます。 単独のイベントは、すべてのイベント バッファーがいっぱいになった場合にのみ削除されます。 イベント バッファーがいっぱいの場合に 1 つのイベントを失うと、パフォーマンスへの影響が最小限に抑えられ、処理されたイベントストリーム内のデータの損失も最小限に抑えられます。
ALLOW_MULTIPLE_EVENT_LOSS
複数のイベントでいっぱいのイベント バッファーをセッションから削除できます。 削除されるイベントの数は、セッションに割り当てられているメモリ サイズ、メモリのパーティション分割、バッファー内のイベントのサイズによって異なります。 通常、このオプションを使用すると、イベント バッファーがすぐに満たされるが、セッションから大量のイベントが失われる可能性がある場合に、サーバーに対するパフォーマンスへの影響を回避できます。
NO_EVENT_LOSS
イベントの削除は許可されません。 このオプションにより、発生したすべてのイベントが保持されます。 このオプションを使用した場合、イベントを開始するすべてのタスクは、イベント バッファーに空きができるまで待機します。 NO_EVENT_LOSSを使用すると、イベント セッションがアクティブな間に検出可能なパフォーマンスの問題が発生する可能性があります。 ユーザー セッションとクエリは、バッファーからイベントがフラッシュされるのを待っている間にストールする可能性があります。
Note
Azure SQL Database、Microsoft FabricのSQLデータベース、Azure SQL Managed Instance( SQL Server 2025 または Always-up-to-date更新ポリシー付き)のイベントファイルターゲットについては、2024年6月以降、
NO_EVENT_LOSSALLOW_SINGLE_EVENT_LOSSと同じ動作をします。NO_EVENT_LOSSを指定すると、メッセージ ID 25665、重大度 10、およびメッセージThis target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead.を含む警告が返され、セッションが作成されます。この変更により、接続のタイムアウト、フェールオーバーの遅延、およびその他の問題が回避され、Azure BLOB ストレージのイベント ファイル ターゲットで
NO_EVENT_LOSSを使用すると、データベースの可用性が低下する可能性があります。NO_EVENT_LOSSは今後Azure SQL Database、Microsoft FabricのSQLデータベース、Azure SQL Managed InstanceのアップデートでサポートされたEVENT_RETENTION_MODE引数として削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。
MAX_DISPATCH_LATENCY = { seconds SECONDS |INFINITE }
イベントをイベント セッション ターゲットにディスパッチする前にメモリにバッファリングする時間を指定します。 既定では、この値は 30 秒に設定されます。
お代わり
SECONDSターゲットへのバッファーのフラッシュを開始する前に待つ秒数を指定します。 seconds は整数です。 最小待機値は 1 秒です。 ただし、0 を使用すると、INFINITE 待機を指定できます。
無限
バッファーがいっぱいになっている、またはイベント セッションが閉じられる場合にのみ、バッファーをターゲットにフラッシュします。
MAX_EVENT_SIZE = size [ KB |MB ]
イベントの最大許容サイズを指定します。 MAX_EVENT_SIZEは、MAX_MEMORYより大きい 1 つのイベントのみを許可するように設定する必要があります。をMAX_MEMORY未満に設定すると、エラーが発生します。 size は、キロバイト (KB) またはメガバイト (MB) 数を示す整数値です。 size をキロバイト単位で指定する場合、最小許容サイズは 64 KB です。 MAX_EVENT_SIZEを設定すると、MAX_MEMORYに加えて size の 2 つのバッファーが作成され、イベント バッファリングに使用されるメモリの合計が MAX_MEMORY + 2 * MAX_EVENT_SIZE。
MEMORY_PARTITION_MODE = { NONE |PER_NODE |PER_CPU }
イベント バッファーのアフィニティを指定します。
NONE以外のオプションバッファーが増え、メモリ消費量が増加しますが、競合を回避し、大規模なマシンのパフォーマンスを向上させることができます。
なし
データベース エンジン インスタンス内に 1 つのバッファー セットが作成されます。
PER_NODE
各 NUMA ノードに対して一連のバッファーが作成されます。
PER_CPU
CPU ごとにバッファーのセットが作成されます。
TRACK_CAUSALITY = { ON |OFF }
因果関係を追跡するかどうかを指定します。 有効な場合、因果関係により、異なるサーバー接続上の関連イベントを一緒に関連付けることができます。
STARTUP_STATE = { ON |OFF }
SQL Server の起動時にこのイベント セッションを自動的に開始するかどうかを指定します。
Note
STARTUP_STATE = ON場合、データベース エンジンが停止してから再起動されたときにイベント セッションが開始されます。 イベント セッションをすぐに開始するには、 ALTER EVENT SESSION ... ON SERVER STATE = STARTを使用します。
オン
イベント セッションは起動時に開始されます。
OFF
イベント セッションは起動時に開始されません。
MAX_DURATION = { time duration { SECONDS |MINUTES |HOURS |DAYS } |UNLIMITED }
対象:SQL Server 2025(17.x)
無制限の
ALTER EVENT SESSION ... STATE = STOPステートメントを使用して停止するまで、開始されると無期限に実行されるイベント セッションを作成します。 これは、MAX_DURATIONが指定されていない場合の既定値です。期間 SECONDS |MINUTES |HOURS |日
セッション開始後に指定した時間が経過した後に自動的に停止するイベント セッションを作成します。 サポートされる最大期間は、2,147,483 秒、35,792 分、596 時間、または 24 日間です。
詳細については、「 タイム バインド イベント セッション」を参照してください。
解説
イベント セッション引数の詳細については、「 拡張イベント セッション」を参照してください。
論理演算子の優先順位は、高い方から NOT、AND、OR です。
アクセス許可
SQL Server と Azure SQL Managed Instance には、 CREATE ANY EVENT SESSION (SQL Server 2022 で導入)、または ALTER ANY EVENT SESSION アクセス許可が必要です。
Microsoft FabricのAzure SQL DatabaseおよびSQL Databaseは、データベース内の CREATE ANY DATABASE EVENT SESSION 権限が必要です。
ヒント
SQL Server 2022 では、拡張イベントに対するより詳細なアクセス許可が導入されました。 詳細については、「 ブログ: PoLP への準拠を向上させるための SQL Server 2022 と Azure SQL の新しい詳細なアクセス許可」を参照してください。
例
A。 SQL Server と Azure SQL Managed Instance の例
test_session という名前のイベント セッションを作成する方法を次の例に示します。 この例では、2 つのイベントを追加し、 event_file ターゲットを使用して、各ファイルのサイズを 256 MB に制限し、保持されるファイル数を 10 に制限します。
IF EXISTS (SELECT 1
FROM sys.server_event_sessions
WHERE name = 'test_session')
DROP EVENT SESSION test_session ON SERVER;
CREATE EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.rpc_starting,
ADD EVENT sqlserver.sql_batch_starting,
ADD EVENT sqlserver.error_reported
ADD TARGET package0.event_file
(
SET filename = N'C:\xe\test_session.xel',
max_file_size = 256,
max_rollover_files = 10
)
WITH (MAX_MEMORY = 4 MB);
B: Azure SQL Database の例
チュートリアルの例については、「 Azure Storage でevent_file ターゲットを持つイベント セッションを作成 する」を参照し、 メモリ内にring_buffer ターゲットを含むイベント セッションを作成します。
コード例は、Azure SQL Database と SQL Managed Instance で異なる場合があります
SQL Server 用に記述された Transact-SQL コード例の中には、Azure SQL Database または Fabric の SQL データベースで実行するために小さな変更が必要なものもあります。 このようなコード例のカテゴリの 1 つに、データベース エンジンの種類によって名前プレフィックスが異なるカタログ ビューが含まれます。
-
server_- SQL Server および Azure SQL Managed Instance のプレフィックス -
database_- Azure SQL Database、Fabric の SQL データベース、および SQL Managed Instance のプレフィックス
Fabric の Azure SQL Database と SQL Database では、データベース スコープのイベント セッションのみがサポートされます。 SQL Server Management Studio (SSMS) は、Azure SQL Database のデータベース スコープのイベント セッションをサポートしています。データベース スコープのセッションを含む 拡張イベント ノードは 、オブジェクト エクスプローラーの各データベースの下に表示されます。
Azure SQL Managed Instance では、データベース スコープのセッションとサーバー スコープのセッションの両方がサポートされます。 SSMS は、SQL Managed Instance に対してサーバー スコープのセッションを完全にサポートしています。すべてのサーバー スコープのセッションを含む拡張イベント ノードが、オブジェクト エクスプローラー内の各マネージド インスタンスの [管理] フォルダーの下に表示されます。
Note
Azure SQL Managed Instance には、サーバー スコープのイベント セッションをお勧めします。
データベース スコープのイベント セッションは、SSMS for Azure SQL Managed Instance のオブジェクト エクスプローラーには表示されません。 SQL マネージド インスタンスでは、データベース スコープのイベント セッションは Transact-SQL でのみ照会および管理できます。
説明のために、次の表に、カタログ ビューの 2 つのサブセットの比較リストを示します。 サポートする異なるデータベース エンジンタイプが異なるため、サブセットの名前のプレフィックスは異なります。
| SQL Server と Azure SQL Managed Instance の名前 | Azure SQL Database の名前、Fabric の SQL データベース、Azure SQL Managed Instance |
|---|---|
sys.server_event_session_actionssys.server_event_session_eventssys.server_event_session_fieldssys.server_event_session_targetssys.server_event_sessions |
sys.database_event_session_actionssys.database_event_session_eventssys.database_event_session_fieldssys.database_event_session_targetssys.database_event_sessions |