적용 대상: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 }
이벤트 세션이 서버 또는 데이터베이스의 컨텍스트에 있는지 여부를 확인합니다.
Microsoft Fabric Preview의 Azure SQL Database 및 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 = <value> [ ,... 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;
WHERE <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 또는 유니코드 문자열입니다. 조건자 비교 함수에 대해서는 암시적 문자열 유형 변환이 수행되지 않습니다. 예기치 않은 형식의 값을 전달하면 오류가 발생합니다.
대상 추가 [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 있는 세션에는 두 번째 event_file 대상을 추가할 수 없습니다.
일반적으로 사용되는 대상에 대한 사용 예제를 비롯한 자세한 내용은 확장 이벤트 대상을 참조하세요.
SET { target_parameter_name = <value> [ , ... n ] }
대상 매개 변수를 설정합니다.
모든 대상 매개 변수 및 해당 설명을 보려면 다음 쿼리를 실행하여 대상 이름(예: , target-name-placeholderevent_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';
Important
링 버퍼 대상을 사용하는 경우 XML 출력의 가능한 데이터 잘림을 방지하기 위해 MAX_MEMORY 매개 변수(세션 매개 변수와 MAX_MEMORY 별개)를 1,024KB 이하로 설정하는 것이 좋습니다.
대상 유형에 대한 자세한 내용은 확장 이벤트 대상을 참조하세요.
WITH ( <event_session_options> [ ,... n ] )
이벤트 세션에 사용할 옵션을 지정합니다.
MAX_MEMORY = size [ KB | MB ]
이벤트 버퍼링을 위해 세션에 할당할 최대 메모리 양을 지정하며 기본값은 4MB입니다. size는 정수이며 KB 또는 MB 값일 수 있습니다. 최대 크기는 2GB(2,048MB)를 초과할 수 없습니다. 그러나 GB 범위에서 메모리 값을 사용하는 것은 권장되지 않습니다.
EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }
이벤트 소실을 처리하는 데 사용할 이벤트 보존 모드를 지정합니다.
ALLOW_SINGLE_EVENT_LOSS
한 개의 이벤트가 세션에서 손실될 수 있습니다. 모든 이벤트 버퍼가 가득 찬 경우 한 개의 이벤트만 삭제됩니다. 이벤트 버퍼가 가득 차면 단일 이벤트를 손실하면 성능에 미치는 영향을 최소화하는 동시에 처리된 이벤트 스트림의 데이터 손실을 최소화할 수 있습니다.
ALLOW_MULTIPLE_EVENT_LOSS
여러 개의 이벤트를 포함하는 가득 찬 이벤트 버퍼가 세션에서 손실될 수 있습니다. 손실되는 이벤트 수는 세션에 할당된 메모리 크기, 메모리 분할 및 버퍼에 있는 이벤트의 크기에 따라 달라집니다. 이 옵션은 일반적으로 이벤트 버퍼가 빠르게 채워지는 경우 서버에 성능 영향을 주지 않지만 세션에서 많은 수의 이벤트가 손실될 수 있습니다.
NO_EVENT_LOSS
이벤트 손실이 허용되지 않습니다. 이 옵션을 사용하면 발생한 모든 이벤트가 유지됩니다. 이벤트 버퍼에 사용 가능한 공간이 생길 때까지 이벤트를 발생시키는 모든 태스크가 대기합니다. NO_EVENT_LOSS 사용하면 이벤트 세션이 활성화된 동안 검색 가능한 성능 문제가 발생할 수 있습니다. 버퍼에서 이벤트가 플러시될 때까지 기다리는 동안 사용자 세션 및 쿼리가 중단될 수 있습니다.
참고 항목
Azure SQL Database의 이벤트 파일 대상, Microsoft Fabric Preview의 SQL 데이터베이스 및 Azure SQL Managed Instance( SQL Server 2025 또는 Always-up-to-date업데이트 정책 사용)의 경우 2024
NO_EVENT_LOSS년 6월부터 동일하게ALLOW_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 Storage의 이벤트 파일 대상과 함께 사용될 때
NO_EVENT_LOSS데이터베이스 가용성을 줄일 수 있는 연결 시간 제한, 장애 조치 지연 및 기타 문제를 방지합니다.NO_EVENT_LOSS은 Azure SQL Database, Microsoft Fabric Preview의 SQL 데이터베이스 및 Azure SQL Managed Instance에 대한 향후 업데이트에서 지원되는EVENT_RETENTION_MODE인수로 제거될 예정입니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.
MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE }
이벤트가 이벤트 세션 대상에 디스패치되기 전에 메모리에 버퍼링되는 시간을 지정합니다. 기본적으로 이 값은 30초로 설정됩니다.
초
SECONDS버퍼를 대상에 플러시하기 시작할 때까지 대기하는 초 단위 시간입니다. 초는 정수입니다. 최소 대기 시간 값은 1초입니다. 값으로 0을 사용하면 INFINITE 대기를 지정할 수 있습니다.
무한
버퍼가 가득 차거나 이벤트 세션이 종료된 경우에만 버퍼를 대상에 플러시합니다.
MAX_EVENT_SIZE = size [ KB | MB ]
이벤트에 허용되는 최대 크기를 지정합니다. MAX_EVENT_SIZE MAX_MEMORY보다 큰 단일 이벤트만 허용하도록 설정해야 합니다. MAX_MEMORY 미만으로 설정하면 오류가 발생합니다. 크기는 정수이며 KB 또는 MB 값일 수 있습니다. 크기가 KB로 지정되는 경우 최소 허용 크기는 64KB입니다. MAX_EVENT_SIZE 설정되면 MAX_MEMORY 외에도 두 개의 크기의 버퍼가 생성되고 이벤트 버퍼링에 사용되는 총 메모리는 MAX_MEMORY + 2 * MAX_EVENT_SIZE.
MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU }
이벤트 버퍼의 선호도를 지정합니다.
NONE 버퍼가 늘어나고 메모리 사용량이 늘어나지만 경합을 방지하고 더 큰 컴퓨터에서 성능을 향상시킬 수 있는 옵션 이외의 옵션입니다.
없음
단일 버퍼 집합이 데이터베이스 엔진 인스턴스 내에 만들어집니다.
PER_NODE
각 NUMA 노드에 대해 버퍼 집합이 만들어집니다.
PER_CPU
각 CPU에 대해 버퍼 집합이 만들어집니다.
TRACK_CAUSALITY = { ON | OFF }
인과 관계를 추적할지 여부를 지정합니다. 이를 ON으로 설정하면 인과 관계에 따라 다른 서버 연결에 있는 관련 이벤트의 상호 연결이 허용됩니다.
STARTUP_STATE = { ON | OFF }
SQL Server가 시작될 때 해당 이벤트 세션을 자동으로 시작할지 여부를 지정합니다.
참고 항목
이 경우 STARTUP_STATE = ON데이터베이스 엔진이 중지된 후 다시 시작될 때 이벤트 세션이 시작됩니다. 이벤트 세션을 즉시 시작하려면 .를 사용합니다 ALTER EVENT SESSION ... ON SERVER STATE = START.
ON
이벤트 세션은 시작 시 시작됩니다.
OFF
이벤트 세션은 시작 시 시작되지 않습니다.
MAX_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에는 (SQL Server 2022에 도입됨) 또는 CREATE ANY EVENT SESSION 권한이 필요합니다 ALTER ANY EVENT SESSION .
Microsoft Fabric Preview의 Azure SQL Database 및 SQL 데이터베이스에는 데이터베이스에 대한 CREATE ANY DATABASE EVENT SESSION 권한이 필요합니다.
팁
SQL Server 2022에는 확장 이벤트에 대한 보다 세부적인 권한이 도입되었습니다. 자세한 내용은 블로그: PoLP 준수를 개선하기 위한 SQL Server 2022 및 Azure SQL에 대한 새로운 세분화된 권한을 참조하세요.
예제
A. SQL Server 및 Azure SQL Managed Instance 예제
다음 예에서는 test_session이라는 이벤트 세션을 만드는 방법을 보여 줍니다. 이 예제에서는 두 개의 이벤트를 추가하고 대상을 사용하여 event_file 각 파일의 크기를 256MB로 제한하고 보존된 파일 수를 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 데이터베이스에서 실행하려면 약간의 변경이 필요합니다. 이러한 코드 예제의 한 범주에는 데이터베이스 엔진 유형에 따라 이름 접두사 차이가 있는 카탈로그 뷰가 포함됩니다.
-
server_- SQL Server 및 Azure SQL Managed Instance의 접두사 -
database_- Azure SQL Database, Fabric의 SQL 데이터베이스 및 SQL Managed Instance에 대한 접두사
Fabric의 Azure SQL Database 및 SQL 데이터베이스는 데이터베이스 범위 이벤트 세션만 지원합니다. SSMS(SQL Server Management Studio)는 Azure SQL Database에 대한 데이터베이스 범위 이벤트 세션을 지원합니다. 데이터베이스 범위 세션을 포함하는 확장 이벤트 노드가 개체 탐색기의 각 데이터베이스 아래에 표시됩니다.
Azure SQL Managed Instance는 데이터베이스 범위 세션과 더 서버 범위 세션을 모두 지원합니다. SSMS는 SQL Managed Instance의 서버 범위 세션을 완벽하게 지원합니다. 모든 서버 범위 세션을 포함하는 확장 이벤트 노드는 개체 탐색기에서 각 관리되는 인스턴스의 관리 폴더 아래에 표시됩니다.
참고 항목
서버 범위 이벤트 세션은 Azure SQL Managed Instance에 권장됩니다.
데이터베이스 범위 이벤트 세션은 Azure SQL Managed Instance용 SSMS의 개체 탐색기에 표시되지 않습니다. SQL 관리형 인스턴스에서 데이터베이스 범위 이벤트 세션은 Transact-SQL로만 쿼리하고 관리할 수 있습니다.
예시를 위해 다음 표에서는 카탈로그 뷰의 두 하위 집합을 나열하고 비교합니다. 하위 집합은 각기 다른 데이터베이스 엔진 유형을 지원하기 때문에 이름 접두사가 서로 다릅니다.
| SQL Server 및 Azure SQL Managed Instance의 이름 | Azure SQL Database의 이름, 패브릭의 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 |