1. 소개
1.1 무엇입니까 SQL Server 장기 이벤트?
SQL Server Extended Events는 관리자와 개발자가 자세한 서버 활동 데이터를 수집하고 분석할 수 있도록 지원하는 경량 성능 모니터링 시스템입니다. 이 시스템은 SQL Server 데이터베이스 엔진이며 일반적인 작업과 문제 해결 시나리오에 대한 포괄적인 통찰력을 제공합니다.
1.2 모니터링을 위해 확장 이벤트를 사용하는 이유는 무엇입니까?
SQL Server Extended Events는 데이터베이스 모니터링 및 문제 해결에 있어 여러 가지 매력적인 이점을 제공합니다.
- 가벼운 아키텍처로 성능에 미치는 영향 최소화
- 데이터 수집 및 이벤트 필터링에 대한 세부적인 제어
- 특정 모니터링 요구 사항에 맞춰 사용자 정의 가능한 데이터 수집
- 여러 패키지에서 동시에 이벤트를 캡처하는 기능
- 관련 작업에 집중할 수 있는 유연한 필터링 기능
- 사용자 경험을 저하시키지 않고 프로덕션 시스템 모니터링 지원
- 포괄적인 성과 지표 추적
- Advanced diagnostic capabilities for troubleshooting
- 규정 준수 요구 사항에 대한 감사 추적 유지 관리
- 실시간 및 과거 데이터 분석 옵션
1.3 확장 이벤트 대 SQL Server 프로파일
DaVinci에는 SQL Server 프로파일 MS SQL Extended Events는 기존 모니터링 도구였던 것에 비해 더욱 효율적인 대안을 제공합니다. Extended Events는 시스템 리소스를 덜 사용하고 운영 환경에 더 나은 확장성을 제공합니다.
SQL Server Profiler는 더 이상 사용되지 않으며 Microsoft에서는 모든 모니터링 활동에 대해 확장 이벤트로 마이그레이션할 것을 권장합니다.
2. 확장 이벤트 아키텍처 이해
2.1 확장 이벤트 엔진 구성 요소
확장 이벤트 엔진은 이벤트 데이터를 수집, 처리 및 저장하기 위해 함께 작동하는 여러 핵심 구성 요소로 구성됩니다. 이러한 구성 요소를 이해하면 효과적인 모니터링 솔루션을 설계하는 데 도움이 됩니다.
- 디스패처 : 디스패처 구성 요소는 이벤트 소스에서 확장 이벤트 엔진으로의 이벤트 흐름을 조정합니다. 이벤트가 발생하면 디스패처는 알림을 수신하여 해당 이벤트 유형을 구독한 활성 세션으로 라우팅합니다.
- 버퍼 : Buffers temporarily store event data in memory before writing to targets. This buffering mechanism improves performance by reducing I/O operations. Buffer size and management settings can be configured to balance memory usage with data capture requirements.
- 세션: A session defines the scope of event monitoring. It specifies which events to capture, what actions to execute, which predicates to apply, and where to store the results. Sessions can be created, modified, started, and stopped independently.
- Target Instance: Target instances represent the storage destinations for captured event data. Each session can write to one or multiple targets, such as files, ring buffers, or counters. Targets process and persist the event information for later analysis.
2.2 이벤트 패키지
SQL Server Extended Events organizes functionality into packages. Each package contains related events, actions, types, predicates, and targets. Common packages include sqlserver, sqlos, and package0.
- sqlserver 패키지는 쿼리 및 트랜잭션과 같은 데이터베이스별 이벤트를 제공합니다.
- sqlos 패키지에는 운영 체제 이벤트가 포함되어 있습니다.
- package0은 모든 패키지에서 사용되는 범용 기능을 제공합니다.
2.3 이벤트 유형 및 필드
이벤트는 내부에서 발생하는 사건을 나타냅니다. SQL Server 모니터링하려는 이벤트입니다. 각 이벤트 유형에는 관련 정보를 캡처하는 미리 정의된 필드가 있습니다. 예를 들어, sql_statement_completed 이벤트에는 기간, CPU 시간, 읽기 및 쓰기 필드가 포함됩니다.
이벤트는 동기 또는 비동기일 수 있습니다. 동기 이벤트는 작업 중에 발생하고, 비동기 이벤트는 완료 후에 발생합니다. 이벤트의 특성을 이해하면 모니터링 요구 사항에 맞는 적절한 이벤트를 선택하는 데 도움이 됩니다.
2.4 작업
Actions add supplementary information to captured events. When an event fires, associated actions execute to collect additional context such as SQL text, session ID, or call stack information.
Common actions include sql_text to capture query statements, database_name to identify the database, and client_hostname to track the originating server. Actions provide essential context for troubleshooting and analysis.
2.5 표적
Targets determine how and where event data is stored. SQL Server Extended Events supports multiple target types, including:
- 디스크 저장을 위한 event_file로, 자세한 분석을 위한 영구 저장을 제공합니다.
- 최소한의 오버헤드로 최근 이벤트에 대한 빠른 액세스를 제공하는 메모리 기반 보존을 위한 ring_buffer
- 간단한 계산을 위한 event_counter
- 그룹화를 위한 히스토그램
- 관련 이벤트를 상관시키기 위한 pair_matching
2.6 술어(필터)
조건자는 지정된 조건에 따라 이벤트를 필터링하여 캡처된 데이터의 양을 줄입니다. 데이터베이스 이름, 애플리케이션 이름, 세션 ID, 기간 임계값 또는 이벤트 필드 값으로 필터링할 수 있습니다.
효과적인 조건자 사용은 관련 이벤트만 포착하여 성능 저하를 최소화합니다. 복잡한 조건자는 논리 연산자를 사용하여 여러 조건을 결합하여 정확한 필터링 기준을 생성합니다.
3. 확장된 이벤트 세션 상태 및 수명 주기
3.1 세션 상태: CREATE, ALTER 및 DROP
확장 이벤트 세션은 다음과 같은 여러 상태로 진행됩니다.
- The CREATE EVENT SESSION statement defines a new session but does not start it. The session exists in a stopped state until explicitly activated.
- The ALTER EVENT SESSION statement modifies session configuration or changes its state between stopped and started.
- DROP EVENT SESSION 문은 서버에서 세션 정의를 완전히 제거합니다.
3.2 세션 내용 및 특징
Each session contains a collection of events, actions, targets, and predicates. Sessions have implied boundaries that define their scope and behavior. Configuration options control memory allocation, event retention, and dispatch latency.
Session characteristics include whether they persist across server restarts, maximum memory allocation, and how they handle memory pressure. These settings significantly impact session behavior and resource consumption.
3.3 세션 경계 및 패키지
Session boundaries define relationships between events, targets, and packages. Events from one package can trigger actions from another package, providing flexibility in data collection strategies.
패키지 관계를 사용하면 단일 세션 내에서 여러 소스의 이벤트를 결합할 수 있습니다. 이 기능을 통해 다양한 SQL Server 하위 시스템.
4. SSMS를 사용하여 확장된 이벤트 세션 만들기
4.1 전제 조건 및 설정
만들기 전에 SQL Server 확장 이벤트 세션의 경우, 적절한 권한이 있는지 확인하세요. 서버 범위 세션의 경우 ALTER ANY EVENT SESSION 권한이, 데이터베이스 범위 세션의 경우 데이터베이스 CONTROL 권한이 필요합니다.
확인 SQL Server Management Studio is installed and connected to your target instance. Familiarize yourself with the monitoring requirements and identify which events and targets best suit your needs.
4.2 개체 탐색기에서 확장 이벤트 액세스
SSMS에서 확장 이벤트 인터페이스에 액세스하려면 다음 단계를 따르세요.
- 엽니다 SQL Server Management Studio에 연결하세요 SQL Server 예.
- 개체 탐색기에서 확장 -> 확장 이벤트.
- 확장 이벤트 노드에는 다음이 포함됩니다. 세션 패키지 모니터링 구성을 관리하기 위한 폴더입니다.
4.3 새 세션 만들기
새로운 세션을 생성하려면:
-
- 마우스 오른쪽 버튼으로 세션 아래의 폴더 확장 이벤트.
- 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 새 세션 구성 대화 상자를 엽니다. 다음 내용은 이 메서드를 사용하여 새 세션을 만듭니다.
참고 : 새 세션 마법사 보다 자세한 안내를 원하시면 이용 가능합니다.
4.3.1 일반 페이지 구성
에 일반 페이지에서 기본 세션 속성을 구성합니다.
- 세션 이름을 입력하세요 세션 이름 필드. 모니터링 목적을 나타내는 설명적인 이름을 사용하세요.
- 선택적으로 선택 Start the event session at server startup 자동 세션 활성화를 활성화합니다.
- 기본 세션 템플릿은 다음과 같습니다. 공백미리 정의된 구성을 사용하는 경우 다른 템플릿을 사용할 수 있습니다.
4.3.2 이벤트 페이지 설정
The 이벤트 이 페이지에서는 모니터링할 이벤트를 선택할 수 있습니다.
- 선택 이벤트 왼쪽부터 페이지 페이지를 선택하십시오 패널.
- . Event library, 이용 가능한 이벤트를 찾아보거나 검색 기능을 이용하세요.
- "sql_statement_completed"와 같은 키워드를 입력하여 이벤트를 필터링하면 관련 이벤트를 찾을 수 있습니다.
- sql_statement_completed와 같은 원하는 이벤트를 선택합니다.
- 이벤트를 이동하려면 오른쪽 화살표 버튼을 클릭하세요. 선택된 이벤트 명부.
4.3.3 데이터 저장 구성
The 데이터 저장매체 페이지는 이벤트 데이터가 저장되는 위치를 정의합니다.
- 선택 데이터 저장매체 왼쪽부터 페이지 페이지를 선택하십시오 패널.
- . 목표 area, choose a target type from the dropdown.
(1) event_file Target
The event_file target stores data to disk files with the .xel extension:
- 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 이벤트_파일 from the target type dropdown.
- Specify the file path, such as C:\temp\YourSession_Target.xel.
- 최대 파일 크기와 파일 수를 설정하여 디스크 공간을 관리하기 위한 롤오버 옵션을 구성합니다.
- The target writes events continuously until the session stops or storage limits are reached.
(2) ring_buffer Target
The ring_buffer target stores events in memory for quick access without disk I/O:
- 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 링 버퍼 as the target type.
- 버퍼에 대한 최대 메모리 할당을 구성합니다.
- 버퍼가 채워지면 이전 이벤트가 삭제되므로 최근 활동 모니터링에 적합합니다.
(3) event_counter Target
The event_counter target simply counts event occurrences without storing detailed data. This provides minimal overhead when you only need frequency information.
(4) histogram Target
The histogram target groups events by a specified field value, creating distribution statistics. This is useful for identifying common patterns or high-frequency values.
(5) pair_matching Target
The pair_matching target correlates related events such as lock acquisition and release. This enables analysis of paired operations and their timing relationships.
절대 고급 설정
The Advnaced 이 페이지는 세션 수준 구성 옵션을 제공합니다.
- 선택 Advnaced 왼쪽부터 페이지 페이지를 선택하십시오 패널.
- 구성 이벤트 보존 모드 메모리 부족 상황에서 이벤트가 어떻게 처리되는지 제어합니다.
- 세트 최대 발송 지연 시간 실시간 처리와 시스템 성능의 균형을 맞추기 위해.
- 구성 최대 메모리 크기 최대 이벤트 크기 귀하의 모니터링 요구 사항에 따라.
- 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 메모리 파티션 모드 단일 또는 다중 CPU 환경에 최적화합니다.
4.4 이벤트 필터(조건자) 구성
술어는 특정 기준에 따라 이벤트를 필터링하여 데이터 볼륨을 줄입니다. 필터를 구성하려면 다음을 수행하세요.
- 에 이벤트 페이지에서 필터링하려는 이벤트(예: "sql_statement_completed")를 선택합니다.
- 구성 이벤트 구성 대화 상자를 엽니다.
- 선택 필터(술어) 탭.
- . 분야 드롭다운에서 필터링할 필드(예: 기간)를 선택합니다.
- 선택 운영자예를 들어, ">"와 같은.
- 필터를 입력하세요 가치관예를 들어 1000000(1초)과 같습니다.
- 필요한 경우 더 많은 조건을 추가하세요.
4.5 작업 및 이벤트 필드 선택
각 이벤트에 대해 수집할 데이터를 선택할 수 있습니다.
- 에 이벤트 페이지에서 데이터를 선택하려는 이벤트(예: "sql_statement_completed")를 선택합니다.
- 구성 이벤트 구성 대화 상자를 엽니다.
- 선택 글로벌 필드(작업) 탭.
- Select actions to add supplementary information, such as database_name or client_app_name.
- 검토 이벤트 필드 어떤 필드가 자동으로 캡처되는지 확인하려면 섹션을 참조하세요.
- 불필요한 필드를 지워 데이터 양을 줄이세요.
4.6 Starting and Managing Sessions
After configuring your session, you can start it and monitor its operation:
- OK 세션을 생성하려면.
- 개체 탐색기에서 다음을 확장합니다. 세션 새 세션을 보려면 폴더를 클릭하세요.
- 세션 이름을 마우스 오른쪽 버튼으로 클릭하고 선택하세요 세션 시작 이벤트 캡처를 시작합니다.
- 라이브 데이터를 보려면 세션을 마우스 오른쪽 버튼으로 클릭하고 선택하세요. 라이브 데이터 시청.
- 마우스 오른쪽 버튼을 클릭하고 선택하여 세션을 중지합니다. 세션 중지.
5. T-SQL을 사용하여 확장된 이벤트 세션 만들기
5.1 이벤트 세션 생성 구문
T-SQL을 사용하여 확장 이벤트 세션을 생성하면 정밀한 제어가 가능하고 자동 배포를 위한 스크립팅이 가능합니다. CREATE EVENT SESSION 문은 특정 구문 구조를 따릅니다.
The basic syntax includes the session name, ADD EVENT clauses for each event, ADD TARGET clauses for storage destinations, and optional WITH clauses for session configuration.
5.2 기본 이벤트 세션 만들기
A basic session monitors specific events and writes results to a target. Here’s how to construct the essential components.
5.2.1 세션 이름 및 옵션 정의
Start by creating the session with a descriptive name:
CREATE EVENT SESSION [SampleSession] ON SERVER
ON SERVER 절은 데이터베이스 변경 사항에도 불구하고 유지되는 서버 범위 세션을 생성합니다. Azure SQL Database의 경우 데이터베이스 범위 세션에는 ON DATABASE를 사용하세요.
5.2.2 ADD EVENT를 사용하여 이벤트 추가
ADD EVENT 절을 사용하여 캡처할 이벤트를 추가합니다.
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
완료된 모든 SQL 문을 캡처합니다. 추가 ADD EVENT 절을 포함하여 여러 이벤트를 추가할 수 있습니다.
5.2.3 이벤트 동작 구성
액션은 각 이벤트에 대한 추가 컨텍스트를 수집합니다. 이벤트 이름 뒤 괄호 안에 액션을 추가하세요.
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
이 예제에서는 완료된 각 명령문에 대한 SQL 텍스트, 데이터베이스 이름 및 사용자 이름을 캡처합니다.
5.2.4 이벤트 조건 설정(WHERE 절)
조건자는 이벤트를 필터링하여 데이터 양을 줄입니다. 이벤트 정의 내에서 WHERE 절을 사용하세요.
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
이 필터는 5초(5,000,000마이크로초)보다 긴 지속 시간을 가진 문장을 필터링합니다.
5.3 Adding Event Targets
Targets define where event data is stored and how it’s processed.
5.3.1 ADD TARGET Syntax
Add targets using the ADD TARGET clause after all events are defined:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
The package0 prefix indicates the target comes from the base package.
5.3.2 Configuring Target Parameters
Each target type accepts specific parameters. For event_file, configure filename, max_file_size, and max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
이 구성은 각각 최대 50MB의 파일을 생성하고, 롤오버를 통해 최대 5개의 파일을 유지합니다.
5.4 세션 옵션 및 설정
WITH 절은 동작과 리소스 사용을 제어하는 세션 수준 옵션을 구성합니다.
5.4.1 MAX_MEMORY 및 EVENT_RETENTION_MODE
압력 하에서 메모리 할당 및 이벤트 처리를 제어합니다.
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
EVENT_RETENTION_MODE options include ALLOW_SINGLE_EVENT_LOSS for minimal memory usage, ALLOW_MULTIPLE_EVENT_LOSS for moderate overhead, and NO_EVENT_LOSS for complete data retention at the cost of potential performance impact.
5.4.2 최대 발송 대기 시간
Set the maximum time events can remain in buffers before being written to targets:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Lower values provide more real-time data at the cost of increased I/O operations.
5.4.3 메모리 파티션 모드
하드웨어 구성에 맞게 메모리 파티셔닝을 최적화하세요.
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
옵션으로는 단일 파티션의 경우 NONE, NUMA 시스템의 경우 PER_NODE, 다중 CPU 시스템에서 최대 동시성을 위한 PER_CPU가 있습니다.
5.5 Starting, Stopping, and Altering Sessions
ALTER EVENT SESSION 문을 통해 세션 상태와 구성을 관리합니다.
5.5.1 ALTER EVENT SESSION for Start/Stop
Start a session after creation:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
실행 중인 세션을 중지합니다.
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 기존 세션 수정
중지된 상태에서 세션 구성을 수정합니다. 이벤트를 추가합니다.
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
이벤트 제거:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 이벤트 세션 삭제
DROP EVENT SESSION을 사용하여 세션을 완전히 제거합니다.
DROP EVENT SESSION [SampleSession] ON SERVER;
삭제하기 전에 세션을 중지해야 합니다.
6. Working with Event Targets in Detail
6.1 event_file Target Configuration
The event_file target provides persistent storage for event data with flexible configuration options.
6.1.1 파일 경로 및 명명 규칙
이벤트 파일의 전체 경로와 파일 이름을 지정하세요.
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
확장 이벤트 로그 파일에는 .xel 확장자를 사용하세요. SQL Server 서비스 계정에는 지정된 디렉토리에 대한 쓰기 권한이 있습니다.
6.1.2 파일 롤오버 및 크기 관리
디스크 공간을 관리하기 위해 자동 파일 롤오버를 구성하세요.
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
파일이 50MB에 도달하면 SQL Server 확장 이벤트는 접미사가 증가하는 새 파일을 생성합니다. 파일이 10개에 도달하면 가장 오래된 파일을 덮어씁니다.
6.1.3 이벤트 파일 데이터 읽기
Query event file data using the sys.fn_xe_file_target_read_file function:
SELECT
event_data,
file_name,
file_offset
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
와일드카드 패턴은 세션과 관련된 모든 파일을 읽습니다.
6.2 ring_buffer Target Usage
The ring_buffer target stores events in memory for quick access to recent activity.
6.2.1 메모리 기반 이벤트 저장소
메모리 기반 저장소에 대한 ring_buffer 구성:
ADD TARGET package0.ring_buffer
이벤트는 세션이 활성화되어 있는 동안만 액세스할 수 있습니다. SQL Server is running. Data is lost when the session stops or the server restarts.
6.2.2 버퍼 크기 및 구성
링 버퍼에 대한 메모리 할당을 제어합니다.
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
메모리를 KB 단위로 지정하세요. 버퍼가 가득 차면 FIFO 방식을 사용하여 이전 이벤트가 삭제됩니다.
6.2.3 링 버퍼 데이터 쿼리
DMV를 통해 링 버퍼 데이터에 액세스:
SELECT
CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer';
The target_data contains XML-formatted event information.
6.3 event_counter Target
The event_counter target provides simple counting without detailed data storage:
ADD TARGET package0.event_counter
This target tracks event frequency with minimal overhead, useful for high-volume monitoring where only counts matter.
6.4 histogram Target
The histogram target groups events by field values:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
이 구성은 데이터베이스 전체의 이벤트 분포를 보여주는 히스토그램을 생성합니다.
6.5 pair_matching Target
The pair_matching target correlates related events such as lock acquisitions with releases:
ADD TARGET package0.pair_matching(
SET begin_event=N'sqlserver.lock_acquired',
end_event=N'sqlserver.lock_released',
begin_matching_columns=N'resource_type',
end_matching_columns=N'resource_type'
)
이를 통해 쌍으로 이루어진 작업과 그 기간을 분석할 수 있습니다.
7. 확장 이벤트 데이터 보기 및 분석
7.1 SSMS를 사용하여 라이브 데이터 보기
SQL Server Management Studio는 확장 이벤트 데이터를 실시간으로 볼 수 있는 그래픽 인터페이스를 제공합니다.
- 개체 탐색기에서 확장 -> 확장 이벤트 -> 세션.
- 활성 세션을 마우스 오른쪽 버튼으로 클릭합니다.
- 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 라이브 데이터 시청 라이브 데이터 뷰어를 엽니다.
- 이벤트는 발생하는 대로 그리드에 표시됩니다.
- 개별 이벤트를 클릭하면 세부 정보 창에서 자세한 필드 값을 볼 수 있습니다.
- 도구 모음 필터를 사용하여 특정 이벤트 유형이나 필드 값에 초점을 맞춥니다.
7.2 T-SQL을 사용하여 이벤트 파일 데이터 쿼리
T-SQL 쿼리는 캡처된 이벤트 데이터에 대한 유연한 분석을 제공합니다.
7.2.1 sys.fn_xe_file_target_read_file Function
이 시스템 기능을 사용하여 이벤트 파일 데이터를 읽습니다.
SELECT
object_name AS EventName,
CAST(event_data AS XML) AS EventData,
file_name,
file_offset,
timestamp_utc
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
이 함수는 XML 형식의 세부 정보가 포함된 이벤트당 한 행을 반환합니다.
7.2.2 XML 이벤트 데이터 구문 분석
XML 이벤트 데이터에서 특정 값을 추출합니다.
SELECT
event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
SELECT CAST(event_data AS XML) AS event_data
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
) AS EventData;
XQuery 표현식은 XML 구조에서 개별 필드 값을 추출합니다.
7.2.3 이벤트 데이터를 테이블로 변환
이벤트 데이터에서 구조화된 결과 세트를 만듭니다.
WITH EventData AS (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
)
SELECT
EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;
7.3 링 버퍼 데이터 쿼리
Extract data from ring_buffer targets:
SELECT
n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);
7.4 확장 이벤트에 대한 시스템 뷰
SQL Server 확장 이벤트 세션을 관리하고 모니터링하기 위한 여러 DMV와 카탈로그 뷰를 제공합니다.
7.4.1 sys.server_event_sessions
서버에 저장된 세션 정의 보기:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
이 카탈로그 보기는 정의된 모든 세션에 대한 구성 세부 정보를 보여줍니다.
7.4.2 sys.dm_xe_sessions
현재 활성화된 세션 보기:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
이 DMV는 활성 확장 이벤트 세션에 대한 런타임 정보를 제공합니다.
7.4.3 sys.dm_xe_session_targets
View targets associated with active sessions:
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
7.4.4 기타 유용한 DMV
추가 뷰는 포괄적인 세션 정보를 제공합니다.
- sys.dm_xe_session_events: 활성 세션의 이벤트를 나열합니다.
- sys.dm_xe_session_event_actions: 세션 이벤트에 대해 구성된 작업을 표시합니다.
- sys.dm_xe_objects: Catalogs all available events, actions, and targets
- sys.dm_xe_object_columns: 각 이벤트 유형에 사용 가능한 세부 정보 필드
- sys.dm_xe_packages: 모든 확장 이벤트 패키지를 나열합니다.
8. 실제 사용 사례 및 예
8.1 SQL 문 실행 모니터링
SQL 문 실행을 추적하면 쿼리 패턴과 성능 특성에 대한 통찰력을 얻을 수 있습니다.
8.1.1 sql_statement_completed 이벤트 추적
완료된 SQL 문을 모니터링하기 위한 세션을 만듭니다.
CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.client_hostname,
sqlserver.username
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryMonitoring.xel',
max_file_size=(100),
max_rollover_files=(5)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
STARTUP_STATE=OFF
);
ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;
8.1.2 데이터베이스 또는 애플리케이션별 필터링
술어를 사용하여 특정 데이터베이스나 애플리케이션에 초점을 맞춥니다.
CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.client_app_name)
WHERE (
[sqlserver].[database_name] = N'YourDatabase'
AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\AppMonitoring.xel'
);
8.2 교착 상태 정보 캡처
교착 상태 분석을 위해서는 충돌하는 거래에 대한 자세한 정보를 수집해야 합니다.
8.2.1 xml_deadlock_report 이벤트
완전한 교착 상태 그래프를 캡처하기 위한 세션을 만듭니다.
CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);
ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;
8.2.2 교착 상태 그래프 분석
교착 상태 정보 추출 및 분석:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
EventXML.query('.') AS DeadlockGraph
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\Deadlocks*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';
교착 상태 그래프에는 프로세스, 리소스, 희생자 선택에 대한 세부 정보가 포함되어 있습니다.
8.3 추적 쿼리 성능 문제
지속 시간 및 리소스 소비 지표를 사용하여 성능이 낮은 쿼리를 식별합니다.
8.3.1 장기 실행 쿼리 감지
특정 기간 임계값을 초과하는 쿼리 캡처:
CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.plan_handle
)
WHERE ([duration] > 5000000) -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\LongQueries.xel'
);
8.3.2 실행 계획 분석
성능 분석을 위한 쿼리 계획 캡처:
CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
ACTION(
sqlserver.sql_text,
sqlserver.database_name
)
WHERE ([duration] > 10000000) -- 10 seconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryPlans.xel',
max_file_size=(200)
);
8.4 로그인 및 보안 이벤트 모니터링
보안 감사를 위해 인증 및 권한 부여 활동을 추적합니다.
8.4.1 로그인 성공 및 실패 추적
성공한 로그인 시도와 실패한 로그인 시도를 모두 모니터링합니다.
CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
ACTION(
sqlserver.client_hostname,
sqlserver.client_app_name
)
),
ADD EVENT sqlserver.login_failed(
ACTION(
sqlserver.client_hostname
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);
8.4.2 권한 변경
보안 권한 수정 추적:
CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SecurityAudit.xel'
);
8.5 데이터베이스 수준 모니터링
데이터베이스별 작업과 상태 변경 사항을 모니터링합니다.
8.5.1 백업 및 복원 이벤트
백업 및 복원 작업을 추적합니다.
CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\BackupRestore.xel'
);
8.5.2 데이터베이스 상태 변경
데이터베이스 상태 전환 모니터링:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 데이터베이스 손상 및 무결성 문제 감지
SQL Server 확장 이벤트는 잠재적인 데이터베이스 손상을 감지하는 조기 경고 기능을 제공하여 문제가 확대되기 전에 사전 개입이 가능합니다.
8.6.1 손상 감지를 위한 주요 이벤트
여러 이벤트는 잠재적인 손상이나 I/O 문제를 나타냅니다.
8.6.1.1 중요 오류에 대한 error_reported 이벤트
error_reported 이벤트는 모든 것을 캡처합니다. SQL Server 손상 관련 오류 번호를 포함한 오류:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
오류 823은 I/O 오류를 나타내고, 824는 논리적 일관성 오류를 나타내며, 825는 하드웨어 문제를 나타낼 수 있는 읽기 재시도 성공을 보고합니다.
8.6.1.2 database_suspect_data_page 이벤트
이 이벤트는 다음과 같은 경우 발생합니다. SQL Server 의심스러운 페이지를 발견합니다.
ADD EVENT sqlserver.database_suspect_data_page
의심스러운 페이지는 잠재적인 손상을 나타내며 msdb.dbo.suspect_pages 테이블에 기록됩니다.
8.6.1.3 errorlog_write 이벤트
기록된 항목을 캡처합니다. SQL Server 오류 로그:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 부패 모니터링 세션 생성
부패 탐지 및 모니터링을 위한 포괄적인 세션을 구성합니다.
8.6.2.1 손상 오류 번호(823, 824, 825) 필터링
Create a targeted session focusing on corruption indicators:
CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
WHERE (
[error_number] IN (823, 824, 825, 832, 855, 856)
OR [severity] >= (20)
)
),
ADD EVENT sqlserver.database_suspect_data_page(
ACTION(
sqlserver.database_name
)
)
8.6.2.2 적절한 심각도 수준 설정
손상을 나타낼 수 있는 심각한 오류를 포함합니다.
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
심각도 20 이상은 종종 손상과 관련된 시스템 수준의 문제를 나타냅니다.
8.6.2.3 Configuring Event File Target for Alerts
분석 및 경고를 위해 손상 이벤트를 저장합니다.
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
max_file_size=(50),
max_rollover_files=(10)
)
WITH (
STARTUP_STATE=ON,
MAX_DISPATCH_LATENCY=5 SECONDS
);
ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;
8.6.3 부패 사건 데이터 분석
수집된 데이터에서 부패 관련 이벤트를 추출하고 해석합니다.
8.6.3.1 의심 페이지 식별
database_suspect_data_page 이벤트에 대한 쿼리:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 오류 세부 정보 및 컨텍스트 추출
손상 패턴에 대한 오류 보고 이벤트를 분석합니다.
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);
8.6.4 DBCC CHECKDB와의 통합
확장 이벤트 데이터를 사용하여 안내합니다. DBCC 체크DB 실행.
8.6.4.1 이벤트 기반 DBCC CHECKDB 트리거
손상 이벤트가 감지되면 포괄적인 검증을 위해 DBCC CHECKDB를 실행합니다.
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
확장 이벤트는 조기 경고를 제공하고, DBCC CHECKDB는 철저한 유효성 검사를 수행합니다.
8.6.4.2 자동화된 부패 대응 워크플로
이벤트 파일을 모니터링하여 자동 응답을 구현합니다.
- 구성 SQL Server 손상 모니터링 이벤트 파일을 주기적으로 쿼리하는 에이전트 작업입니다.
- 손상된 이벤트가 발견되면 영향을 받은 데이터베이스에서 DBCC CHECKDB를 실행합니다.
- 이벤트 세부 정보와 DBCC CHECKDB 결과가 포함된 이메일 알림을 DBA에게 보냅니다.
- 추세 분석을 위해 중앙 모니터링 테이블에 결과를 기록합니다.
8.6.4.3 사전 예방적 모니터링과 성능의 균형 유지
확장 이벤트는 빈번한 DBCC CHECKDB 실행에 비해 오버헤드가 낮은 손상 감지 기능을 제공합니다.
- 실시간 손상 감지를 위해 확장 이벤트를 지속적으로 실행합니다.
- 손상 표시기가 나타날 때만 DBCC CHECKDB를 실행합니다.
- 유지 관리 기간 동안 정기적인 DBCC CHECKDB 일정을 예약합니다.
- 확장 이벤트를 사용하여 즉각적인 주의가 필요한 데이터베이스를 식별합니다.
이 접근 방식은 지속적인 무결성 검사에 드는 상당한 리소스 소모 없이 사전 예방적 모니터링을 제공합니다.
8.6.4.4 손상된 데이터베이스 복구
데이터베이스에서 손상이 감지되면 DBCC CHECKDB를 사용하여 사소한 손상을 수정할 수 있습니다. 실패하면 타사 도구를 사용해 보세요. SQL 데이터베이스 복구 도구일반적으로 심각하게 손상된 데이터베이스에서 더 높은 복구율을 제공합니다.
9. 서버 범위 확장 이벤트 vs 데이터베이스 범위 확장 이벤트
9.1 서버 범위 이벤트 세션
서버 범위 세션은 전체 활동을 모니터링합니다. SQL Server 인스턴스. 이러한 세션은 ON SERVER 절로 생성되며 마스터 데이터베이스에 유지됩니다.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
서버 범위 세션은 모든 데이터베이스에서 이벤트를 캡처하며 인스턴스 수준 모니터링에 적합합니다.
9.2 데이터베이스 범위 이벤트 세션(Azure SQL Database)
데이터베이스 범위 세션은 단일 데이터베이스로 제한되며 주로 서버 수준 액세스가 제한되는 Azure SQL Database에서 사용됩니다.
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
Azure SQL Database에서 이벤트 파일은 로컬 파일 시스템이 아닌 Azure Blob Storage에 저장됩니다.
9.3 차이점 및 사용 사례
서버 범위 세션은 모든 데이터베이스에 대한 포괄적인 모니터링을 제공하지만, 높은 권한이 필요합니다. 데이터베이스 범위 세션은 격리 기능을 제공하며 특정 애플리케이션이나 테넌트를 모니터링할 때 적합합니다.
중앙 집중식 모니터링, 데이터베이스 전반의 성능 문제 해결, 보안 감사에 서버 범위 세션을 사용하세요. Azure SQL Database, 멀티 테넌트 환경 또는 애플리케이션 팀에 모니터링 책임을 위임할 때 데이터베이스 범위 세션을 사용하세요.
10. Azure SQL 데이터베이스의 확장 이벤트
10.1 Azure 관련 고려 사항
Azure SQL Database는 온프레미스와 몇 가지 차이점을 지닌 확장 이벤트를 구현합니다. SQL Server세션은 기본적으로 데이터베이스 범위이며, 이벤트 파일 저장소는 로컬 파일 시스템이 아닌 Azure Blob Storage를 사용합니다.
Authentication to Azure Blob Storage requires a SAS token configured within the event file target. Connection strings reference the storage account and container where event files are stored.
10.2 Available Targets in Azure
Azure SQL Database supports these Extended Event targets:
- event_file: Azure Blob Storage에 쓰기
- ring_buffer: 온프레미스와 동일한 동작을 하는 메모리 기반 스토리지
- event_counter: 이벤트 발생 횟수를 계산합니다.
The event_file target requires configuration with Azure Blob Storage credentials:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 데이터베이스 범위 세션 만들기
Azure SQL Database에서 세션을 만듭니다.
CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);
ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;
Azure의 데이터베이스 범위 세션은 온-프레미스의 서버 범위 세션과 비슷하게 동작하지만 범위는 현재 데이터베이스로 제한됩니다.
11. 모범 사례 및 성능 최적화
11.1 성능 영향 최소화
확장 이벤트는 최소한의 오버헤드로 설계되었지만, 부적절한 구성은 성능에 영향을 미칠 수 있습니다. 다음 지침을 따르세요.
- 모든 것을 캡처하는 대신 특정 술어를 사용하여 이벤트를 필터링합니다.
- 처리 오버헤드를 추가하는 불필요한 작업 수집을 피하세요.
- Choose appropriate targets based on data retention needs
- 합리적인 버퍼 크기와 디스패치 대기 시간을 설정합니다.
- DMV를 사용하여 세션 리소스 소비 모니터링
11.2 올바른 이벤트 및 필터 선택
모니터링 목표에 직접적으로 부합하는 이벤트를 선택하세요. 꼭 필요한 경우가 아니면 고빈도 이벤트는 피하고, 항상 조건문을 적용하여 데이터 양을 줄이세요.
예를 들어, 모든 sql_statement_completed 이벤트를 캡처하는 대신 특정 데이터베이스나 기간 임계값을 필터링합니다.
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Target Selection Guidelines
Choose targets based on your analysis requirements:
- 자세한 기록 분석 및 장기 보존을 위해 event_file을 사용하세요.
- 최소한의 I/O 영향으로 실시간 모니터링을 위해 ring_buffer를 사용하세요.
- 빈도만 중요한 경우 event_counter를 사용하세요
- 분포 분석을 위해 히스토그램을 사용하세요
- 상관관계 이벤트 분석을 위해 pair_matching을 사용하세요
11.4 세션 구성 권장 사항
적절한 리소스 제한으로 세션을 구성하세요.
- 예상 이벤트 볼륨 및 서버 리소스에 따라 MAX_MEMORY를 설정합니다.
- Use ALLOW_SINGLE_EVENT_LOSS for minimal overhead in most scenarios
- 실시간 요구 사항과 성능 간의 균형을 맞추려면 MAX_DISPATCH_LATENCY를 설정하세요.
- 멀티 프로세서 시스템에서 PER_CPU 메모리 분할 사용
- Avoid STARTUP_STATE=ON unless continuous monitoring is required
11.5 이벤트 파일 크기 및 보존 관리
무제한 디스크 사용을 방지하기 위해 파일 롤오버를 구성하세요.
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
이 구성은 약 1GB의 이벤트 데이터(파일 10개 × 100MB)를 유지합니다. 보존 요구 사항 및 사용 가능한 저장 공간에 따라 조정하세요.
12. 확장 이벤트 문제 해결
12.1 일반적인 문제 및 해결 방법
Common Extended Events issues include sessions not capturing data, performance degradation, file target problems, and unexpected session behavior.
12.2 세션이 데이터를 캡처하지 못함
세션이 예상 이벤트를 캡처하지 못하는 경우:
- Verify the session is started using sys.dm_xe_sessions.
- 모든 이벤트가 필터링되지 않는지 확인하기 위해 술어를 확인하세요.
- Confirm events are firing by temporarily removing filters.
- 세션 데이터를 볼 수 있는 권한이 있는지 확인하려면 권한을 검토하세요.
- Check that target configuration is correct and writable.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 성능 저하
확장 이벤트로 인해 성능 문제가 발생하는 경우:
- 이벤트 볼륨을 줄이려면 술어를 추가합니다.
- Remove unnecessary actions that collect supplementary data.
- 쓰기 빈도를 줄이려면 MAX_DISPATCH_LATENCY를 늘리세요.
- EVENT_RETENTION_MODE를 ALLOW_SINGLE_EVENT_LOSS로 변경합니다.
- 빈도가 높은 이벤트에는 event_file 대신 ring_buffer를 사용하는 것을 고려하세요.
12.4 File Target Issues
File target problems often relate to permissions or disk space:
- 다음을 확인하십시오. SQL Server service account has write permissions to the target directory.
- 충분한 디스크 공간이 있는지 확인하세요.
- 지정된 경로가 존재하고 접근 가능한지 확인하세요.
- 파일이 예상대로 롤오버되지 않으면 파일 롤오버 구성을 검토하세요.
12.5 시스템 뷰를 사용한 디버깅
DMV를 사용하여 확장 이벤트 문제를 진단합니다.
-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;
-- View session targets and their status
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;
13. 고급 주제
13.1 사용자 정의 이벤트 패키지 만들기
고급 사용자는 사용자 정의 이벤트 패키지를 만들어 확장할 수 있습니다. SQL Server 확장된 이벤트 기능. 이를 위해서는 C++ 개발 및 통합이 필요합니다. SQL Server 확장성 프레임워크.
사용자 정의 패키지를 사용하면 애플리케이션별 이벤트를 모니터링하거나 타사 모니터링 시스템을 확장 이벤트 인프라와 통합할 수 있습니다.
13.2 이벤트 세션 템플릿
SSMS는 일반적인 모니터링 시나리오에 대한 기본 템플릿을 제공합니다. 마법사를 통해 새 세션을 생성할 때 템플릿에 액세스하세요.
- 새 세션 대화 상자에서 다음을 클릭합니다. 주형 쓰러지 다.
- 쿼리 세부 정보 추적이나 시스템 상태 등 사용 가능한 템플릿 중에서 선택하세요.
- 귀하의 특정 요구 사항에 맞게 템플릿을 수정하세요.
13.3 모니터링 솔루션과 통합
확장된 이벤트 데이터는 엔터프라이즈 모니터링 솔루션에 다음과 같은 정보를 제공할 수 있습니다.
- 이벤트 데이터를 중앙 로깅 시스템으로 내보내기
- 이벤트 파일을 구문 분석하고 모니터링 데이터베이스에 데이터를 로드합니다.
- BI 도구를 사용하여 사용자 정의 대시보드 만들기
- 특정 이벤트 패턴에 따라 알림 트리거
- 상관 관계 SQL Server 애플리케이션 및 인프라 메트릭이 있는 이벤트
13.4 자동화 및 스케줄링
다음을 사용하여 확장 이벤트 관리를 자동화합니다. SQL Server 에이전트:
- Create jobs to start/stop sessions during specific time windows
- 이벤트 파일 분석 및 보고 일정 예약
- 오래된 이벤트 파일을 보관하거나 삭제하여 데이터 보존 정책을 구현합니다.
- 성능 문제나 보안 이벤트와 같은 감지된 조건에 대한 대응을 자동화합니다.
14. 마이그레이션 SQL Server 프로파일
14.1 SQL Server 프로파일러 이벤트에서 확장 이벤트로의 매핑
Microsoft는 다음 사이의 매핑을 제공합니다. SQL Server 프로파일 이벤트 및 확장 이벤트. 일반적인 매핑은 다음과 같습니다.
- SQL:배치 완료 -> sql_배치_완료
- SQL:BatchStarting -> sql_batch_starting
- SQL:명령문 완료 -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starting
- 교착 상태 그래프 -> xml_deadlock_report
- 감사 로그인 -> 로그인
- 감사 로그아웃 -> 로그아웃
14.2 추적 정의 변환
기존 변환 SQL Server 프로파일러는 동등한 이벤트를 식별하고 적절한 조건자를 구성하여 확장 이벤트 세션을 추적합니다. SSMS는 일반적인 변환에 대한 지원을 제공합니다.
추적 필터를 검토하고 이를 확장 이벤트 조건자로 변환합니다. 확장 이벤트의 작업은 다음 추적 열을 대체합니다. SQL Server 프로파일 러.
14.3 성능 비교
확장 이벤트는 다음보다 훨씬 더 나은 성능을 제공합니다. SQL Server 프로파일러. 벤치마크 연구에 따르면 확장 이벤트는 CPU 사이클을 덜 소모하고 트랜잭션 처리량에 미치는 영향도 적습니다.
확장 이벤트는 비동기 처리와 최적화된 메모리 관리를 사용합니다. SQL Server 프로파일러는 추적 처리가 완료될 때까지 차단되는 동기 이벤트 캡처에 의존합니다.
15. 결론
15.1 핵심 개념 요약
SQL Server Extended Events는 모니터링 및 문제 해결을 위한 강력하고 가벼운 프레임워크를 제공합니다. SQL Server. The architecture consists of events, actions, predicates, targets, and sessions that work together to capture relevant server activity.
Sessions can be created using SSMS or T-SQL, offering flexibility for both ad-hoc troubleshooting and automated monitoring. Multiple target types support different analysis approaches, from real-time monitoring with ring_buffer to historical analysis with event_file.
Extended Events는 다음과 비교하여 더 우수한 성능을 제공합니다. SQL Server 더욱 포괄적인 모니터링 기능을 제공하는 동시에 프로파일러를 통해 데이터베이스 관리자와 개발자는 문제를 진단하고, 성능을 최적화하고, 보안을 강화하고, 규정을 준수할 수 있습니다.
15.2 다음 단계 및 추가 리소스
계속해서 개발하려면 SQL Server XEvents 전문성:
- 테스트 환경에서 확장 이벤트를 구현하여 실무 경험을 얻으세요.
- 전체 이벤트 카탈로그와 자세한 구문 참조를 보려면 Microsoft 설명서를 검토하세요.
- 가입하기 SQL Server 다른 사람들의 경험으로부터 배우기 위한 커뮤니티 포럼
- 맞춤형 패키지 및 모니터링 플랫폼과의 통합과 같은 고급 시나리오를 살펴보세요.
- Develop a library of session templates for common monitoring scenarios
16 FAQ 섹션
Q : 무엇입니까 SQL Server 장기 이벤트?
A: SQL Server Extended Events는 가벼운 성능 모니터링 시스템으로 통합되었습니다. SQL Server 최소한의 오버헤드로 서버 작업에 대한 자세한 정보를 수집하는 데이터베이스 엔진입니다.
질문: 확장 이벤트는 어떻게 다릅니까? SQL Server 프로파일러?
A: 확장 이벤트는 더 나은 성능, 더 낮은 오버헤드, 더 유연한 구성을 제공합니다. SQL Server 프로파일 러. SQL Server Profiler는 더 이상 사용되지 않으며 Microsoft에서는 모든 모니터링 작업에 확장 이벤트를 사용할 것을 권장합니다.
질문: 확장된 이벤트가 영향을 미칠 수 있습니까? SQL Server 공연?
A: 적절한 조건자 및 리소스 제한을 사용하여 올바르게 구성하면 확장 이벤트는 성능에 미치는 영향을 최소화합니다. 필터링 없이 제대로 구성하지 않으면 성능에 영향을 미칠 수 있습니다.
질문: 확장 이벤트 세션을 만드는 데 필요한 권한은 무엇입니까?
답변: 서버 범위 세션의 경우 ALTER ANY EVENT SESSION 권한이 필요하고, 데이터베이스 범위 세션의 경우 데이터베이스에 대한 CONTROL 권한이 필요합니다.
질문: 확장 이벤트 데이터를 보려면 어떻게 해야 하나요?
A: 사용 SQL Server Management Studio’s live data viewer, query event files with sys.fn_xe_file_target_read_file, or query ring buffer data through DMVs.
질문: 확장 이벤트가 데이터베이스 손상을 감지할 수 있나요?
A: 네, 확장 이벤트는 손상 관련 오류(823, 824, 825)와 의심스러운 페이지 이벤트를 포착하여 잠재적인 손상 문제에 대한 조기 경고를 제공합니다.
질문: 사건, 동작, 술어의 차이점은 무엇인가요?
A: Events are occurrences you want to monitor. Actions add supplementary information to captured events. Predicates filter events based on conditions to reduce data volume.
질문: 특정 애플리케이션이나 데이터베이스의 쿼리를 어떻게 모니터링합니까?
답변: 이벤트 구성에서 술어를 사용하여 database_name, client_app_name 또는 기타 관련 필드로 필터링합니다.
Q: What targets should I use for Extended Events?
A: 영구 저장 및 과거 분석에는 event_file을 사용하고, 낮은 오버헤드로 실시간 모니터링을 위해서는 ring_buffer를 사용하고, 간단한 빈도 추적에는 event_counter를 사용하고, 분포 분석에는 histogram을 사용합니다.
질문: Azure SQL Database에서 확장 이벤트를 사용할 수 있나요?
A: 네, Azure SQL Database는 Azure Blob Storage에 저장된 이벤트 파일을 통해 데이터베이스 범위의 확장 이벤트를 지원합니다.
질문: 데이터를 캡처하지 못하는 확장 이벤트 세션의 문제를 해결하려면 어떻게 해야 하나요?
A: Verify the session is started, check predicates aren’t filtering all events, confirm target configuration, and review permissions using system DMVs.
질문: 확장 이벤트 관리를 자동화할 수 있나요?
A: 네, 사용합니다 SQL Server Agent jobs to start/stop sessions, analyze event files, implement retention policies, and respond to detected conditions.
참고자료
- Quick Start: Extended Events in SQL Server – 마이크로소프트 학습
- 확장 이벤트 개요 – Microsoft Learn
- SQL Server 확장 이벤트 세션 – Microsoft Learn
- Targets for Extended Events in SQL Server – 마이크로소프트 학습
- SQL Server 확장 이벤트 엔진 – Microsoft Learn
- SQL Server 프로파일러: 완전 가이드
- DBCC CHECKDB: 전체 가이드
- DataNumen SQL Recovery
저자에 관하여
위안 셩 10년 이상의 경력을 가진 선임 데이터베이스 관리자(DBA)입니다. SQL Server 환경 및 기업 데이터베이스 관리 분야에서 그는 금융 서비스, 의료, 제조 분야에서 수백 건의 데이터베이스 복구 시나리오를 성공적으로 해결했습니다.
원은 다음을 전문으로 합니다. SQL Server 데이터베이스 복구, 고가용성 솔루션그는 성능 최적화 분야에도 정통합니다. 풍부한 실무 경험을 바탕으로 수 테라바이트 규모의 데이터베이스 관리, 구현 등을 수행해 왔습니다. 항상 사용 가능한 가용성 그룹또한 핵심 비즈니스 시스템을 위한 자동화된 백업 및 복구 전략을 개발하고 있습니다.
Yuan은 기술적 전문성과 실용적인 접근 방식을 통해 데이터베이스 관리자와 IT 전문가가 복잡한 문제를 해결하는 데 도움이 되는 포괄적인 가이드를 만드는 데 중점을 둡니다. SQL Server 효율적으로 도전합니다. 그는 최신 정보를 유지합니다. SQL Server Microsoft의 새로운 릴리스와 진화하는 데이터베이스 기술을 활용하고, 정기적으로 복구 시나리오를 테스트하여 권장 사항이 실제 모범 사례를 반영하는지 확인합니다.
에 대한 질문이 SQL Server 복구가 필요하거나 추가적인 데이터베이스 문제 해결 지침이 필요하신가요? Yuan이 환영합니다. 피드백과 제안 이러한 기술적 자원을 개선하기 위해.

















