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

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

모범 사례

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

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

이벤트 세션 대상

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

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

참고 항목

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

Transact-SQL 차이점

SQL Server 및 Azure SQL Managed Instance에서 CREATE EVENT SESSION, ALTER EVENT SESSIONDROP EVENT SESSION 문을 실행할 때 절을 ON SERVER 사용합니다. Azure SQL Database에서 이벤트 세션은 ON DATABASE 데이터베이스 범위이므로 Azure SQL 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 됩니다. 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, , WriteList) 권한이 있어야 합니다.
  • 이벤트 세션의 수명을 포함하는 시작 시간 및 만료 시간을 갖습니다.
  • IP 주소 제한이 없습니다.

리소스 거버넌스

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

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

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

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

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

참고 항목

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

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

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

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

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

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

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