다음을 통해 공유


ALTER EVENT SESSION(Transact-SQL)

적용 대상: SQL Server Azure SQL Managed Instance

이벤트 세션을 시작 또는 중지하거나 이벤트 세션 구성을 변경합니다.

Transact-SQL 구문 표기 규칙

구문

ALTER EVENT SESSION event_session_name  
ON SERVER  
{  
    [ [ {  <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 } ]  
}  

인수

용어 정의
event_session_name 기존 이벤트 세션의 이름입니다.
STATE = START | STOP 이벤트 세션을 시작 또는 중지합니다. 이 인수는 ALTER EVENT SESSION이 이벤트 세션 개체에 적용되는 경우에만 사용할 수 있습니다.
ADD EVENT <event_specifier> <event_specifier>로 식별되는 이벤트를 이벤트 세션과 연결합니다.
[event_module_guid] .event_package_name.event_name 이벤트 패키지에 있는 이벤트의 이름입니다. 여기서 각 매개 변수의 의미는 다음과 같습니다.

- event_module_guid는 이벤트가 포함된 모듈의 GUID입니다.
- event_package_name은 동작 개체가 포함된 패키지입니다.
- event_name은 이벤트 개체입니다.

이벤트는 sys.dm_xe_objects 뷰에 object_type 'event'로 표시됩니다.
SET { event_customizable_attribute= <value> [ ,...n] } 이벤트의 사용자 지정 가능한 특성을 지정합니다. 사용자 지정 가능한 특성은 sys.dm_xe_object_columns 뷰에 column_type 'customizable' 및 object_name = event_name으로 표시됩니다.
ACTION ( { [event_module_guid] .event_package_name.action_name [ , ...n] } ) 이벤트 세션과 연결할 동작입니다. 여기서 각 매개 변수의 의미는 다음과 같습니다.

- event_module_guid는 이벤트가 포함된 모듈의 GUID입니다.
- event_package_name은 동작 개체가 포함된 패키지입니다.
- action_name은 동작 개체입니다.

동작은 sys.dm_xe_objects 뷰에 object_type 'action'으로 표시됩니다.
WHERE <predicate_expression> 이벤트 처리 여부를 확인하는 데 사용할 조건자 식을 지정합니다. <predicate_expression>이 true일 경우 이벤트가 세션에 대한 동작과 대상에 의해 추가로 처리됩니다. predicate_expression> false이면 <이 이벤트에 대한 작업 및 대상 처리가 발생하지 않습니다. 조건자 식은 문자열 인수를 제한하는 3,000자로 제한됩니다.
event_field_name 조건자 원본을 식별하는 이벤트 필드의 이름입니다.
[event_module_guid].event_package_name.predicate_source_name 전역 조건자 원본의 이름입니다. 여기서 각 매개 변수의 의미는 다음과 같습니다.

- event_module_guid는 이벤트가 포함된 모듈의 GUID입니다.
- event_package_name은 조건자 개체가 포함된 패키지입니다.
- predicate_source_name은 sys.dm_xe_objects 뷰에서 object_type 'pred_source'로 정의됩니다.
[event_module_guid].event_package_name.predicate_compare_name 이벤트와 연결할 조건자 개체의 이름입니다. 여기서 각 매개 변수의 의미는 다음과 같습니다.

- event_module_guid는 이벤트가 포함된 모듈의 GUID입니다.
- event_package_name은 조건자 개체가 포함된 패키지입니다.
- predicate_compare_name은 sys.dm_xe_objects 뷰에서 object_type 'pred_compare'로 정의된 전역 원본입니다.
DROP EVENT <event_specifier> <event_specifier>로 식별되는 이벤트를 삭제합니다. <event_specifier>는 이벤트 세션에서 유효해야 합니다.
ADD TARGET <event_target_specifier> <event_target_specifier>로 식별되는 대상을 이벤트 세션과 연결합니다.
[event_module_guid].event_package_name.target_name 이벤트 세션에 있는 대상의 이름입니다. 여기서 각 매개 변수의 의미는 다음과 같습니다.

- event_module_guid는 이벤트가 포함된 모듈의 GUID입니다.
- event_package_name은 동작 개체가 포함된 패키지입니다.
- target_name은 동작입니다. 동작은 sys.dm_xe_objects 뷰에 object_type 'target'으로 표시됩니다.
SET { target_parameter_name= <value> [, ...n] } 대상 매개 변수를 설정합니다. 대상 매개 변수는 sys.dm_xe_object_columns 뷰에 column_type 'customizable' 및 object_name = target_name으로 표시됩니다.

참고: 링 버퍼 대상을 사용하는 경우 XML 출력의 가능한 데이터 잘림을 방지하기 위해 max_memory 대상 매개 변수를 2,048KB(킬로바이트)로 설정하는 것이 좋습니다. 다양한 대상 유형을 사용할 경우에 대한 자세한 내용은 SQL Server 확장 이벤트 대상을 참조하세요.
DROP TARGET <event_target_specifier> <event_target_specifier>로 식별되는 대상을 삭제합니다. <event_target_specifier>는 이벤트 세션에서 유효해야 합니다.
EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } 이벤트 소실을 처리하는 데 사용할 이벤트 보존 모드를 지정합니다.

ALLOW_SINGLE_EVENT_LOSS
한 개의 이벤트가 세션에서 손실될 수 있습니다. 모든 이벤트 버퍼가 가득 찬 경우 한 개의 이벤트만 삭제됩니다. 이벤트 버퍼가 가득 찬 경우 이벤트 하나가 소실될 수 있도록 하면 SQL Server의 성능에 미치는 영향을 허용 범위 내로 유지하면서도 처리된 이벤트 스트림에서 데이터가 소실되는 것을 최소화할 수 있습니다.

ALLOW_MULTIPLE_EVENT_LOSS
여러 개의 이벤트를 포함하는 가득 찬 이벤트 버퍼가 세션에서 손실될 수 있습니다. 손실되는 이벤트 수는 세션에 할당된 메모리 크기, 메모리 분할 및 버퍼에 있는 이벤트의 크기에 따라 달라집니다. 이 옵션은 이벤트 버퍼가 빠른 속도로 채워질 때 서버에 미치는 성능 영향을 최소화하지만 많은 수의 이벤트가 세션에서 손실될 수 있습니다.

NO_EVENT_LOSS
이벤트 손실이 허용되지 않습니다. 이 옵션을 사용하면 발생한 모든 이벤트가 유지됩니다. 이벤트 버퍼에 사용 가능한 공간이 생길 때까지 이벤트를 발생시키는 모든 태스크가 대기합니다. 따라서 이벤트 세션이 활성 상태인 동안에는 성능이 저하될 수 있습니다. 버퍼에서 이벤트가 플러시되기를 기다리는 동안 사용자 연결이 교착 상태에 빠질 수 있습니다. Azure SQL Database의 이벤트 파일 대상의 경우 ALLOW_SINGLE_EVENT_LOSS 동일하게 동작합니다. 자세한 내용은 EVENT_RETENTION_MODE 참조하세요.
MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE } 이벤트가 이벤트 세션 대상에 디스패치되기 전에 메모리에 버퍼링되는 시간을 지정합니다. 최소 대기 시간 값은 1초입니다. 값으로 0을 사용하면 INFINITE 대기를 지정할 수 있습니다. 기본적으로 이 값은 30초로 설정됩니다.

SECONDS
버퍼를 대상에 플러시하기 시작할 때까지 대기하는 초 단위 시간입니다. 는 정수입니다.

INFINITE
버퍼가 가득 차거나 이벤트 세션이 종료된 경우에만 버퍼를 대상에 플러시합니다.

참고: MAX_DISPATCH_LATENCY = 0 SECONDS는 MAX_DISPATCH_LATENCY = 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
SQL Server 인스턴스 내에 한 개의 버퍼 집합이 만들어집니다.

PER NODE - NUMA 노드당 한 개의 버퍼 집합이 만들어집니다.

PER NODE - CPU당 한 개의 버퍼 집합이 만들어집니다.
TRACK_CAUSALITY = { ON | OFF } 인과 관계를 추적할지 여부를 지정합니다. 이를 ON으로 설정하면 인과 관계에 따라 다른 서버 연결에 있는 관련 이벤트의 상호 연결이 허용됩니다.
STARTUP_STATE = { ON | OFF } SQL Server가 시작될 때 해당 이벤트 세션을 자동으로 시작할지 여부를 지정합니다.

STARTUP_STATE=ON이면 SQL Server가 중지된 후 다시 시작되는 경우에만 이벤트 세션이 시작됩니다.

ON= 시작 시 이벤트 세션이 시작됩니다.

OFF = 시작 시 이벤트 세션이 시작되지 않습니다.

설명

ADD 동일한 문에는 인수와 DROP 인수를 사용할 수 없습니다.

사용 권한

ALTER ANY EVENT SESSION 권한이 필요합니다.

SQL Server 2022에는 확장 이벤트에 대한 보다 세부적인 여러 가지 권한이 도입되었습니다. 자세한 내용은 블로그: POLP 준수를 개선하기 위한 SQL Server 2022 및 Azure SQL에 대한 새로운 세분화된 권한입니다.

예제

다음 예에서는 이벤트 세션을 시작하고 몇 가지 사용 중인 세션 통계를 확인한 다음 기존 세션에 두 개의 이벤트를 추가합니다.

-- Start the event session  
ALTER EVENT SESSION test_session ON SERVER  
STATE = start;  
GO  

-- Obtain live session statistics   
SELECT * FROM sys.dm_xe_sessions;  
SELECT * FROM sys.dm_xe_session_events;  
GO  
  
-- Add new events to the session  
ALTER EVENT SESSION test_session ON SERVER  
ADD EVENT sqlserver.database_transaction_begin,  
ADD EVENT sqlserver.database_transaction_end;  
GO  

참고 항목