확장 이벤트 개요

적용 대상: 예SQL Server(지원되는 모든 버전) 예Azure SQL Database

SQL Server 확장 이벤트 아키텍처를 사용하여 성능 문제를 해결하거나 파악하는 데 필요한 만큼의 데이터만 수집할 수 있습니다. 확장 이벤트는 구성 가능하며 확장성이 매우 높습니다.

확장 이벤트는 사용되지 않는 SQL 추적 및 SQL Server Profiler 기능을 대체합니다.

확장 이벤트에 대한 자세한 내용은 빠른 시작: SQL Server의 확장 이벤트를 참조하세요.

SQL Server 확장 이벤트의 이점

확장 이벤트는 최소한의 성능 리소스를 사용하는 간단한 성능 모니터링 시스템입니다. SQL Server Management Studio는 세션을 생성 및 수정하고 세션 데이터를 표시 및 분석할 수 있도록 확장 이벤트용 그래픽 사용자 인터페이스를 제공합니다. 확장에 대한 자세한 내용은 |개체 탐색기에서 이벤트 세션 관리 |SSMS XEvent Profiler 사용에서 확인할 수 있습니다.

확장 이벤트 개념

SQL Server 확장 이벤트는 이벤트나 이벤트 소비자와 같은 기존 개념을 바탕으로 하고 Windows용 이벤트 추적의 개념을 사용하며 여기에 새로운 개념을 도입했습니다.

다음 표는 확장 이벤트의 개념에 대해 설명합니다.

항목 Description
SQL Server 확장 이벤트 패키지 개체를 포함하는 확장 이벤트 패키지에 대해 설명합니다. 이러한 개체는 확장 이벤트 세션이 실행 중일 때 데이터를 가져오고 처리하는 데 사용됩니다.
SQL Server 확장 이벤트 대상 이벤트 세션이 지속되는 동안 데이터를 수신할 수 있는 이벤트 소비자에 대해 설명합니다.
SQL Server 확장 이벤트 엔진 확장 이벤트 세션을 구현 및 관리하는 엔진에 대해 설명합니다.
SQL Server 확장 이벤트 세션 확장 이벤트 세션에 대해 설명합니다.
   

확장 이벤트 아키텍처

확장 이벤트는 서버 시스템을 위한 일반적인 이벤트 처리 시스템을 지칭하는 이름입니다. 확장 이벤트 인프라는 SQL Server데이터와의 연계가 가능하고 특정 조건에서는 운영 체제 및 데이터베이스 애플리케이션 데이터와 연계해서 사용할 수 있는 기능도 지원합니다. 운영 체제의 경우 확장 이벤트 출력이 ETW(Windows용 이벤트 추적)로 전달되어야 합니다. ETW는 이벤트 데이터와 Windows 운영 체제 또는 애플리케이션 이벤트 데이터의 상관 관계를 파악할 수 있습니다.

모든 애플리케이션에는 애플리케이션 내부 및 외부 모두에서 유용한 실행 지점이 있습니다. 애플리케이션 내부에서는 태스크의 초기 실행 중에 수집된 정보를 사용하여 비동기 처리를 큐에 넣을 수 있습니다. 애플리케이션 외부에서 실행 지점은 정보와 함께 모니터링 유틸리티를 제공합니다. 이 정보는 모니터링되는 애플리케이션의 동작 및 성능 특성에 대한 정보입니다.

확장 이벤트는 프로세스 외부에서의 이벤트 데이터 사용을 지원하며 이 데이터는 일반적으로 사용자가 성능 모니터링을 수행하거나 제품에서 디버깅 목적으로 애플리케이션을 개발하여 제품을 관리하거나 지원하는 데 사용됩니다. XEvent Profiler, 성능 모니터, T-SQL 또는 Windows 명령줄 도구와 같은 도구를 사용하여 데이터를 사용하거나 분석합니다.

확장 이벤트는 다음과 같은 주요 요소를 고려하여 디자인되었습니다.

  • 확장 이벤트 엔진은 이벤트 중립적입니다. 이 엔진은 이벤트 내용에 따른 제한이 없으므로 모든 이벤트를 모든 대상에 바인딩할 수 있습니다. 확장 이벤트 엔진에 대한 자세한 내용은 SQL Server Extended Events Engine을 참조하십시오.

  • 이벤트는 확장 이벤트의 대상 이라고 하는 이벤트 소비자와 분리됩니다. 따라서 모든 대상이 모든 이벤트를 수신할 수 있습니다. 또한 발생한 모든 이벤트는 대상에서 자동으로 사용되므로 추가 이벤트 컨텍스트가 기록되거나 제공될 수 있습니다. 자세한 내용은 SQL Server Extended Events Targets을 참조하세요.

  • 이벤트는 이벤트가 발생할 때 실행되는 동작과는 별개입니다. 따라서 모든 이벤트에 모든 동작을 연결할 수 있습니다.

  • 조건자를 사용하면 이벤트 데이터를 캡처해야 할 때를 동적으로 필터링할 수 있으므로 동적 필터링을 통해 확장 이벤트 인프라의 유연성이 높아집니다. 자세한 내용은 SQL Server Extended Events Packages을 참조하세요.

확장 이벤트는 이벤트 데이터를 동기적으로 생성하고 데이터를 비동기적으로 처리하여 유연한 이벤트 처리 솔루션을 제공합니다. 또한 확장 이벤트는 다음 기능도 지원합니다.

  • 사용자가 문제 해결을 위해 특정 이벤트를 격리할 수 있도록 허용하면서 서버 시스템 전체에서 일관된 이벤트 처리 방식

  • 기존 ETW 도구 통합 및 지원

  • Transact-SQL을 기반으로 하는 완전히 구성 가능한 이벤트 처리 메커니즘

  • 활성 프로세스에 거의 영향을 주지 않고 동적으로 이를 모니터링할 수 있는 기능

  • 성능에 크게 영향을 주지 않고 실행되는 기본 시스템 상태 세션. 이 세션은 성능 문제를 해결하는 데 사용할 수 있는 시스템 데이터를 수집합니다. 자세한 내용은 system_health 세션 사용을 참조하세요.

확장 이벤트 태스크

Management Studio 또는 Transact-SQL을 통해 Transact-SQL DDL(데이터 정의 언어) 문을 실행하거나 동적 관리 뷰와 함수 또는 카탈로그 뷰를 사용하면 해당 SQL Server 환경에 맞는 간단하거나 복잡한 SQL Server 확장 이벤트 문제 해결 솔루션을 만들 수 있습니다.

태스크 설명 항목
개체 탐색기 를 사용하여 이벤트 세션을 관리합니다. 개체 탐색기에서 이벤트 세션 관리
확장 이벤트 세션을 만드는 방법에 대해 설명합니다. 확장 이벤트 세션 만들기
대상 데이터를 보고 새로 고치는 방법에 대해 설명합니다. SQL Server 확장 이벤트의 대상 데이터 고급 보기
확장 이벤트 도구를 사용하여 SQL Server 확장 이벤트 세션을 만들고 관리하는 방법에 대해 설명합니다. 확장 이벤트 도구
확장 이벤트 세션을 변경하는 방법에 대해 설명합니다. 확장 이벤트 세션 변경
이벤트와 관련된 필드에 대한 정보를 가져오는 방법에 대해 설명합니다. 모든 이벤트에 대한 필드 가져오기
등록된 패키지에서 사용할 수 있는 이벤트를 확인하는 방법에 대해 설명합니다. 등록된 패키지에 대한 이벤트 보기
등록된 패키지에서 사용할 수 있는 확장 이벤트 대상을 확인하는 방법에 대해 설명합니다. 등록된 패키지의 확장 이벤트 대상 보기
각 SQL 추적 이벤트 및 관련 열에 해당하는 확장 이벤트의 이벤트 및 동작을 확인하는 방법에 대해 설명합니다. SQL 추적 이벤트 클래스에 해당하는 확장 이벤트 항목 확인
CREATE EVENT SESSION 또는 ALTER EVENT SESSION에 ADD TARGET 인수를 사용할 경우에 설정할 수 있는 매개 변수를 확인하는 방법에 대해 설명합니다. ADD TARGET 인수에 대한 구성 가능한 매개 변수 가져오기
기존 SQL 추적 스크립트를 확장 이벤트 세션으로 변환하는 방법에 대해 설명합니다. 기존 SQL 추적 스크립트를 확장 이벤트 세션으로 변환
잠금을 보유 중인 쿼리, 쿼리 계획 및 잠긴 시점의 Transact-SQL 스택을 확인하는 방법에 대해 설명합니다. 잠금을 보유한 쿼리 파악
데이터베이스 성능을 저하시키는 잠금의 원인을 파악하는 방법에 대해 설명합니다. 가장 많은 잠금이 발생한 개체 찾기
확장 이벤트를 Windows용 이벤트 추적과 함께 사용하여 시스템 작업을 모니터링하는 방법에 대해 설명합니다. 확장 이벤트를 사용하여 시스템 작업 모니터링
확장 이벤트 대해 카탈로그 뷰 및 DMV(동적 관리 뷰) 사용 SQL Server 확장 이벤트에 대한 시스템 뷰의 SELECT 및 JOIN
   

다음 Transact-SQL(T-SQL) 쿼리를 사용하여 가능한 모든 확장 이벤트와 해당 설명을 나열합니다.

SELECT
     obj1.name as [XEvent-name],
     col2.name as [XEvent-column],
     obj1.description as [Descr-name],
     col2.description as [Descr-column]
  FROM
               sys.dm_xe_objects        as obj1
      JOIN sys.dm_xe_object_columns as col2 on col2.object_name = obj1.name
  ORDER BY
    obj1.name,
    col2.name

코드 예제는 Azure SQL Database와 다를 수 있음

SQL Server 온-프레미스용으로 작성된 일부 Transact-SQL 코드 예제를 클라우드의 Azure SQL Database 서비스에서 실행하려면 몇 가지 사항을 변경해야 합니다. 해당 코드 예제의 한 가지 범주로 두 데이터베이스 시스템에서 다음과 같이 이름 접두사에 약간 차이가 있는 시스템 뷰가 있습니다.

  • server_   -   ‘온-프레미스의 접두사’
  • database_   -   ‘Azure SQL Database의 접두사’

예시를 위해 다음 표에서는 시스템 뷰의 두 하위 집합을 나열하고 비교합니다. 알아보기 쉽도록 하위 집합은 _event 문자열을 포함하는 뷰 이름으로 제한되었습니다. 하위 집합은 각기 다른 두 데이터베이스 시스템에서 가져왔기 때문에 이름 접두사가 서로 다릅니다.

온-프레미스 2017의 이름 클라우드 서비스의 이름
server_event_notifications
server_event_session_actions
server_event_session_events
server_event_session_fields
server_event_session_targets
server_event_sessions
server_events
server_trigger_events
database_event_session_actions
database_event_session_events
database_event_session_fields
database_event_session_targets
database_event_sessions
   

위의 표에 나와 있는 두 목록은 2019년 6월을 기준으로 정확하게 표시되었습니다. 그러나 여기에 제공된 테이블 내용은 유지 관리되지 않으므로 만료될 수 있습니다. 정확한 목록을 보려면 다음 T-SQL SELECT 문을 실행합니다. 각 데이터베이스 시스템에서 한 번씩, SELECT를 두 번 실행합니다.

SELECT name
    FROM sys.all_objects
    WHERE
        (name LIKE 'database\_%' { ESCAPE '\' } OR
         name LIKE 'server\_%' { ESCAPE '\' })
        AND name LIKE '%\_event%' { ESCAPE '\' }
        AND type = 'V'
    ORDER BY name;

참고 항목

데이터 계층 애플리케이션
SQL Server 개체 및 버전에 대한 DAC 지원
데이터 계층 애플리케이션 배포
데이터 계층 애플리케이션 모니터링
 
확장 이벤트 동적 관리 뷰
확장 이벤트 카탈로그 뷰(Transact-SQL)
 
XELite: XEL 파일 또는 라이브 SQL 스트림에서 XEvents를 읽을 수 있는 플랫폼 간 라이브러리, 2019년 5월에 릴리스됨.
Read-SQLXEvent PowerShell cmdlet 2019년 6월 릴리스.
SQL Mysteries: XEvent 세션의 인과 관계 추적 및 이벤트 순서(블로그 게시일 2019년 4월 1일)