적용 대상:SQL Server
Azure SQL Managed Instance
이벤트 세션을 시작 또는 중지하거나 이벤트 세션 구성을 변경합니다.
구문
ALTER EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
[ [ { <add_drop_event> [ , ...n ] }
| { <add_drop_event_target> [ , ...n ] } ]
[ WITH ( <event_session_options> [ , ...n ] ) ]
]
| [ STATE = { START | STOP } ]
}
<add_drop_event>::=
{
[ ADD EVENT <event_specifier>
[ ( {
[ SET { event_customizable_attribute = <value> [ , ...n ] } ]
[ ACTION ( { [event_module_guid].event_package_name.action_name [ , ...n ] } ) ]
[ WHERE <predicate_expression> ]
} ) ]
]
| DROP EVENT <event_specifier> }
<event_specifier> ::=
{
[event_module_guid].event_package_name.event_name
}
<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'
}
<add_drop_event_target>::=
{
ADD TARGET <event_target_specifier>
[ ( SET { target_parameter_name = <value> [ , ...n ] } ) ]
| DROP TARGET <event_target_specifier>
}
<event_target_specifier>::=
{
[event_module_guid].event_package_name.target_name
}
<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
기존 이벤트 세션의 이름입니다.
STATE = START | 멈추다
이벤트 세션을 시작 또는 중지합니다. 인수는 STATE 자체적으로 지정해야 합니다. 동일한 ALTER EVENT SESSION 문의 다른 인수와 결합할 수 없습니다.
이벤트 <event_specifier 추가>
이벤트 세션과 연결할 이벤트를 식별합니다. < > event_specifier [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 또는 유니코드 문자열입니다. 조건자 비교 함수에 대해서는 암시적 문자열 유형 변환이 수행되지 않습니다. 예기치 않은 형식의 값을 전달하면 오류가 발생합니다.
DROP EVENT <event_specifier>
이벤트 세션에서 제거할 이벤트를 식별합니다. 이벤트 지정자는 [event_module_guid] 형식입니다. event_package_name. event_name 위치:
event_module_guid는 이벤트가 포함된 모듈의 GUID입니다.
event_package_name은 동작 개체가 포함된 패키지입니다.
event_name은 이벤트 개체입니다.
< > event_specifier 이전에 이벤트 세션에 추가된 이벤트를 식별해야 합니다.
대상 <event_target_specifier 추가>
이벤트 세션과 연결할 대상을 식별합니다. 이벤트 대상 지정자는 [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';
중요합니다
링 버퍼 대상을 사용하는 경우 XML 출력의 가능한 데이터 잘림을 방지하기 위해 MAX_MEMORY 매개 변수(세션 매개 변수와 MAX_MEMORY 별개)를 1,024KB 이하로 설정하는 것이 좋습니다.
대상 유형에 대한 자세한 내용은 확장 이벤트 대상을 참조하세요.
DROP 대상 <event_target_specifier>
이벤트 세션에서 제거할 대상을 식별합니다. 이벤트 대상 지정자는 [event_module_guid] 형식입니다. event_package_name. target_name 위치:
- event_module_guid는 이벤트가 포함된 모듈의 GUID입니다.
- event_package_name은 동작 개체가 포함된 패키지입니다.
- target_name 대상의 이름입니다.
이벤트 대상 지정자는 이전에 이벤트 세션에 추가된 대상을 식별해야 합니다.
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 사용하면 이벤트 세션이 활성화된 동안 검색 가능한 성능 문제가 발생할 수 있습니다. 버퍼에서 이벤트가 플러시될 때까지 기다리는 동안 사용자 세션 및 쿼리가 중단될 수 있습니다.
비고
2024 년 6월부터 Azure SQL Database 및 Azure SQL Managed Instance의 이벤트 파일 대상(SQL Server 2025 또는 Always-up-to-date
NO_EVENT_LOSS사용)의 경우와 동일하게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 및 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 }
데이터베이스 엔진이 시작될 때 이 이벤트 세션을 자동으로 시작할지 여부를 지정합니다.
비고
이 경우 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중지할 때까지 무기한 실행되도록 합니다.기간 SECONDS | MINUTES | HOURS | 일
세션이 시작된 후 지정된 시간이 경과한 후 이벤트 세션이 자동으로 중지되도록 합니다. 지원되는 최대 기간은 2,147,483초 또는 35,792분 또는 596시간 또는 24일입니다.
자세한 내용은 시간 바인딩된 이벤트 세션을 참조하세요.
설명
이벤트 세션 인수에 대한 자세한 내용은 확장 이벤트 세션을 참조하세요.
ADD 동일한 문에는 인수와 DROP 인수를 사용할 수 없습니다.
사용 권한
SQL Server 및 Azure SQL Managed Instance에는 ALTER ANY EVENT SESSION 권한이 필요합니다.
Azure SQL Database에는 데이터베이스에 대한 ALTER ANY DATABASE EVENT SESSION 권한이 필요합니다.
팁
SQL Server 2022에는 확장 이벤트에 대한 보다 세부적인 권한이 도입되었습니다. 자세한 내용은 블로그: PoLP 준수를 개선하기 위한 SQL Server 2022 및 Azure SQL에 대한 새로운 세분화된 권한을 참조하세요.
예제
A. 이벤트 세션 시작 및 중지
이 예제를 데이터베이스 이벤트 세션과 ON SERVERON DATABASE함께 사용하려면 .
ALTER EVENT SESSION test_session ON SERVER STATE = START;
ALTER EVENT SESSION test_session ON SERVER STATE = STOP;
B. 기존 세션에 새 이벤트 추가
이 예제를 데이터베이스 이벤트 세션과 ON SERVERON DATABASE함께 사용하려면 .
ALTER EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.database_transaction_begin,
ADD EVENT sqlserver.database_transaction_end;
C. 세션 통계 보기
이 예제를 데이터베이스 이벤트 세션과 함께 사용하려면 로 sys.dm_xe_sessionssys.dm_xe_database_sessionssys.dm_xe_session_events바꾸고 .sys.dm_xe_database_session_events
SELECT *
FROM sys.dm_xe_sessions
WHERE name = 'test_session';
SELECT se.*
FROM sys.dm_xe_session_events AS se
WHERE EXISTS (SELECT 1
FROM sys.dm_xe_sessions AS s
WHERE s.address = se.event_session_address
AND s.name = 'test_session');