다음을 통해 공유


Azure SQL Database 및 Azure SQL Managed Instance의 확장 이벤트

적용 대상:Azure SQL DatabaseAzure SQL Managed Instance

확장 이벤트에 대한 소개는 다음을 참조하세요.

Azure SQL Database 및 Azure SQL Managed Instance의 확장 이벤트에 대한 기능 집합, 기능 및 사용 시나리오는 SQL Server에서 사용할 수 있는 기능과 유사합니다. 주요 차이점은 다음과 같습니다.

  • event_file 대상은 항상 디스크의 파일이 아닌 Azure Storage의 Blob을 사용합니다.
  • Azure SQL Database에서 이벤트 세션은 항상 데이터베이스 범위입니다. 이는 다음을 의미합니다.
    • 한 데이터베이스의 이벤트 세션은 다른 데이터베이스의 이벤트를 수집할 수 없습니다.
    • 세션에 포함할 사용자 데이터베이스의 컨텍스트에서 이벤트가 발생해야 합니다.
  • Azure SQL Managed Instance에서 서버 범위 이벤트 세션과 데이터베이스 범위 이벤트 세션을 모두 만들 수 있습니다. 대부분의 시나리오에서 서버 범위 이벤트 세션을 사용하는 것이 좋습니다.

시작하기

Azure SQL Database 및 Azure SQL Managed Instance에서 확장 이벤트를 빠르게 시작하는 데 도움이 되는 두 가지 예제가 있습니다.

  • Azure Storage에서 event_file 대상으로 이벤트 세션 만들기 이 예제에서는 event_file 대상을 사용하여 Azure Storage의 파일(Blob)에서 이벤트 데이터를 캡처하는 방법을 보여 줍니다. 캡처된 이벤트 데이터를 유지해야 하거나 SSMS(SQL Server Management Studio)에서 이벤트 뷰어를 사용하여 캡처된 데이터를 분석하려는 경우 이를 사용합니다.
  • 메모리에서 ring_buffer 대상을 사용하여 세션 만들기 이 예제에서는 ring_buffer 대상을 사용하여 메모리의 이벤트 세션에서 최신 이벤트를 캡처하는 방법을 보여 줍니다. 캡처된 이벤트 데이터를 저장하지 않고도 임시 조사 또는 문제 해결 중에 최근 이벤트를 빠르게 살펴볼 수 있습니다.

확장 이벤트를 사용하여 읽기 전용 복제본(replica)을 모니터링할 수 있습니다. 자세한 내용은 복제본에 대한 쿼리 읽기를 참조하세요.

모범 사례

데이터베이스 엔진 상태 및 워크로드 성능에 영향을 주지 않고 Azure SQL Database 및 Azure SQL Managed Instance에서 확장 이벤트를 안정적으로 사용하려면 다음 모범 사례를 채택합니다.

  • event_file 대상을 사용하는 경우 다음을 수행합니다.
    • 이벤트 세션을 만드는 데이터베이스 또는 Managed Instance와 동일한 Azure 지역의 스토리지 계정을 사용합니다.
    • 스토리지 계정의 중복도를 데이터베이스, Elastic Pool 또는 Managed Instance의 중복도와 맞춥니다. 로컬 중복된 리소스의 경우 LRS, GRS 또는 RA-GRS를 사용합니다. 영역 중복된 리소스의 경우 ZRS, GZRS 또는 RA-GZRS를 사용합니다. 자세한 내용은 Azure Storage 중복도를 참조하세요.
    • Hot 이외의 Blob 액세스 계층을 사용하지 마세요.
  • 각 데이터베이스 엔진을 다시 시작한 후 자동으로 시작되는 연속 실행 이벤트 세션을 만들려면(예: 장애 조치(failover) 또는 유지 관리 이벤트 후) 사용자 CREATE EVENT SESSION 또는 ALTER EVENT SESSION 문의 STARTUP_STATE = ON 이벤트 세션 옵션을 포함합니다.
  • 반대로 임시 문제 해결에 사용되는 것과 같은 단기 이벤트 세션에 STARTUP_STATE = OFF를 사용합니다.
  • Azure SQL Database의 기본 제공 dl 이벤트 세션에서 교착 상태 이벤트를 읽지 마세요. 많은 수의 교착 상태 이벤트가 수집된 경우 sys.fn_xe_file_target_read_file() 함수를 사용하여 읽으면 master 데이터베이스에서 메모리 부족 오류가 발생할 수 있습니다. 이로 인해 로그인 처리에 영향을 미치고 애플리케이션이 중단될 수 있습니다. 교착 상태를 모니터링하는 권장 방법은 확장 이벤트를 사용하여 Azure SQL Database에서 교착 상태 그래프 수집을 참조하세요.

이벤트 세션 대상

SQL Database 및 Azure SQL Managed Instance는 다음과 같은 대상을 지원합니다.

  • event_file 대상. Azure Storage 컨테이너의 Blob에 전체 버퍼를 씁니다.
  • ring_buffer 대상. 새 이벤트 데이터로 대체될 때까지 이벤트 데이터를 메모리에 보관합니다.
  • event_counter 대상. 확장 이벤트 세션 동안 발생한 모든 이벤트의 수를 셉니다.
  • 히스토그램 대상. 별도의 버킷에서 필드 또는 작업의 다양한 값이 나타나는 수를 계산합니다.
  • event_stream. 이벤트 데이터를 .Net 애플리케이션에 스트리밍합니다.

참고 항목

Azure SQL Database 및 Azure SQL Managed Instance의 event_stream 대상은 미리 보기 상태입니다.

Transact-SQL 차이점

SQL Server 및 Azure SQL Managed Instance에서 CREATE EVENT SESSION, ALTER EVENT SESSIONDROP EVENT SESSION 문을 실행할 때 ON SERVER 절을 사용합니다. Azure SQL Database에서 이벤트 세션은 데이터베이스 범위이므로 Azure SQL Database에서 ON DATABASE 절을 대신 사용합니다.

확장 이벤트 카탈로그 뷰

확장 이벤트는 여러 카탈로그 뷰를 제공합니다. 카탈로그 뷰는 이벤트 세션 메타데이터 또는 정의에 대해 알려줍니다. 뷰는 활성 이벤트 세션의 인스턴스에 대한 정보를 반환하지 않습니다.

카탈로그 뷰의 이름 설명
sys.database_event_session_actions 이벤트 세션의 각 이벤트의 각 작업에 대한 행을 반환합니다.
sys.database_event_session_events 이벤트 세션의 각 이벤트에 대한 행을 반환합니다.
sys.database_event_session_fields 이벤트 및 대상에 명시적으로 설정된 사용자 지정 가능한 각 열에 대한 행을 반환합니다.
sys.database_event_session_targets 이벤트 세션의 각 이벤트 대상에 대해 한 행을 반환합니다.
sys.database_event_sessions 데이터베이스의 각 이벤트 세션에 대한 행을 반환합니다.

확장 이벤트 동적 관리 뷰

확장 이벤트는 여러 DMV(동적 관리 뷰)를 제공합니다. DMV는 시작된 이벤트 세션에 대한 정보를 반환합니다.

DMV의 이름 설명
sys.dm_xe_database_session_event_actions 이벤트 세션 동작에 대한 정보를 반환합니다.
sys.dm_xe_database_session_events 세션 이벤트에 대한 정보를 반환합니다.
sys.dm_xe_database_session_object_columns 세션에 바인딩된 개체의 구성 값을 표시합니다.
sys.dm_xe_database_session_targets 세션 대상에 대한 정보를 반환합니다.
sys.dm_xe_database_sessions 현재 데이터베이스의 각 이벤트 세션 실행에 대한 행을 반환합니다.

일반 DMV

Azure SQL Database, Azure SQL Managed Instance 및 SQL Server에 공통적인 추가 확장 이벤트 DMV가 있습니다.

사용 가능한 이벤트, 작업 및 대상

SQL Server에서와 마찬가지로 다음 쿼리를 사용하여 사용 가능한 이벤트, 작업 및 대상을 가져올 수 있습니다.

SELECT o.object_type,
       p.name AS package_name,
       o.name AS db_object_name,
       o.description AS db_obj_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON p.guid = o.package_guid
WHERE o.object_type IN ('action','event','target')
ORDER BY o.object_type,
         p.name,
         o.name;

사용 권한

Azure SQL Database 및 Azure SQL Managed Instance에서 확장 이벤트는 세분화된 권한 모델을 지원합니다. 다음 권한을 부여할 수 있습니다.

CREATE ANY DATABASE EVENT SESSION
DROP ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION ADD EVENT
ALTER ANY DATABASE EVENT SESSION DROP EVENT
ALTER ANY DATABASE EVENT SESSION ADD TARGET
ALTER ANY DATABASE EVENT SESSION DROP TARGET
ALTER ANY DATABASE EVENT SESSION ENABLE
ALTER ANY DATABASE EVENT SESSION DISABLE
ALTER ANY DATABASE EVENT SESSION OPTION

이러한 각 사용 권한 컨트롤에 대한 자세한 내용은 CREATE EVENT SESSION, ALTER EVENT SESSIONDROP EVENT SESSION을 참조하세요.

이러한 모든 권한은 CONTROL데이터베이스 또는 Managed Instance에 대한 권한에 포함됩니다. Azure SQL Database에서 데이터베이스 소유자(dbo), db_owner 데이터베이스 역할의 멤버 및 논리 서버 관리자는 데이터베이스 CONTROL 권한을 보유합니다. Azure SQL Managed Instance에서 sysadmin 서버 역할의 멤버는 인스턴스에 대한 CONTROL 권한을 보유합니다.

저장 컨테이너 권한 부여 및 제어

event_file 대상을 사용하면 이벤트 데이터가 Azure Storage 컨테이너의 Blob에 저장됩니다. 이벤트 세션을 실행하는 데이터베이스 엔진에는 이 컨테이너에 대한 특정 액세스 권한이 필요합니다. 컨테이너에 대한 SAS 토큰을 만들고 토큰을 자격 증명에 저장하여 이 액세스 권한을 부여합니다.

Azure SQL Database에서 데이터베이스 범위 자격 증명을 사용해야 합니다. Azure SQL Managed Instance에서는 서버 범위 자격 증명을 사용합니다.

Azure Storage 컨테이너에 대해 만드는 SAS 토큰은 다음 요구 사항을 충족해야 합니다.

  • rwl(Read, Write, List) 권한이 있습니다.
  • 이벤트 세션의 수명을 포함하는 시작 시간 및 만료 시간이 있습니다.
  • IP 주소 제한 사항이 없습니다.

리소스 거버넌스

Azure SQL Database에서 확장 이벤트 세션의 메모리 사용량은 리소스 경합을 최소화하기 위해 데이터베이스 엔진에서 동적으로 제어됩니다.

이벤트 세션에서 사용할 수 있는 메모리에는 제한이 있습니다.

  • 단일 데이터베이스에서 총 세션 메모리는 128MB로 제한됩니다.
  • Elastic Pool에서 개별 데이터베이스는 단일 데이터베이스 제한에 의해 제한되며 총 512MB를 초과할 수 없습니다.

메모리 제한을 참조하는 오류 메시지가 표시되면 수행할 수 있는 수정 작업은 다음과 같습니다.

  • 실행하는 동시 이벤트 세션 수를 줄입니다.
  • 이벤트 세션에 대한 CREATEALTER 문을 사용하여 세션에 대한 MAX_MEMORY 절에 지정한 메모리 양을 줄입니다.

참고 항목

확장 이벤트에서 MAX_MEMORY 절은 세션을 만들거나 변경할 때(세션 수준에서) 및 ring_buffer 대상(대상 수준)을 사용할 때의 두 가지 컨텍스트에 표시됩니다. 위의 제한은 세션 수준 메모리에 적용됩니다.

Azure SQL Database에서 시작된 이벤트 세션 수에는 제한이 있습니다.

  • 단일 데이터베이스에서 제한은 100입니다.
  • Elastic Pool에서 제한은 풀당 100개의 데이터베이스 범위 세션입니다.

조밀한 Elastic Pool에서 시작된 총 세션 수가 100개 미만인 경우에도 메모리 제약 조건으로 인해 새 확장 이벤트 세션을 시작하지 못할 수 있습니다.

이벤트 세션에서 사용하는 총 메모리를 찾으려면 이벤트 세션이 시작된 데이터베이스에 연결된 상태에서 다음 쿼리를 실행합니다.

SELECT name AS session_name,
       total_buffer_size + total_target_memory AS total_session_memory
FROM sys.dm_xe_database_sessions;

Elastic Pool에 대한 총 이벤트 세션 메모리를 찾으려면 이 쿼리를 풀의 모든 데이터베이스에서 실행해야 합니다.