Amazon RDS for Microsoft SQL Server에서 확장 이벤트 사용하기

Amazon RDS for Microsoft SQL Server에서 확장 이벤트 사용하기

확장 이벤트(extended events)는 SQL Server에서 디버깅과 문제 해결 정보를 수집하는 도구예요. 마이크로소프트가 폐기한 SQL Trace와 Server Profiler를 대체하며, 프로파일러 트레이스와 비슷하지만 추적할 이벤트를 더 세밀하게 제어할 수 있어요. 이 페이지에서 제한 사항, 구성 방법, Multi-AZ 고려 사항, 파일 조회까지 차근차근 알려드릴게요.

출처: 문서

본문

Microsoft SQL Server의 확장 이벤트를 사용하면 Amazon RDS for SQL Server의 디버깅 및 문제 해결 정보를 수집할 수 있어요. 확장 이벤트는 Microsoft가 더 이상 권장하지 않는(deprecated) SQL Trace와 Server Profiler를 대체합니다. 확장 이벤트는 프로파일러 트레이스와 비슷하지만 추적되는 이벤트를 더 세밀하게 제어할 수 있어요. 확장 이벤트는 Amazon RDS에서 SQL Server 2016 이상 버전에서 지원됩니다. 자세한 내용은 Microsoft 문서의 "확장 이벤트 개요"를 참고하세요.

Amazon RDS for SQL Server에서 마스터 사용자 권한을 가진 사용자에게는 확장 이벤트가 자동으로 켜집니다.

제한 사항 및 권장 사항

RDS for SQL Server에서 확장 이벤트를 사용할 때 다음 제한 사항이 적용됩니다.

  • 확장 이벤트는 Enterprise 및 Standard 에디션에서만 지원됩니다.
  • 기본 확장 이벤트 세션은 변경할 수 없습니다.
  • 세션 메모리 파티션 모드는 NONE으로 설정하세요.
  • 세션 이벤트 보존 모드는 ALLOW_SINGLE_EVENT_LOSS 또는 ALLOW_MULTIPLE_EVENT_LOSS 중 하나여야 해요.
  • ETW(Event Tracing for Windows) 대상은 지원되지 않습니다.
  • 파일 대상은 D:\rdsdbdata\log 디렉터리에 있어야 해요.
  • 페어 매칭 대상의 경우 respond_to_memory_pressure 속성을 1로 설정하세요.
  • 링 버퍼 대상 메모리는 4MB보다 클 수 없습니다.
  • 다음 작업은 지원되지 않습니다: debug_break, create_dump_all_threads, create_dump_single_threads.
  • rpc_completed 이벤트는 다음 버전 이상에서 지원됩니다: 15.0.4083.2, 14.0.3370.1, 13.0.5865.1, 12.0.6433.1, 11.0.7507.2.

RDS for SQL Server에서 확장 이벤트 구성하기

RDS for SQL Server에서는 확장 이벤트 세션의 일부 매개변수 값을 구성할 수 있어요. 다음 표는 구성 가능한 매개변수를 설명합니다.

매개변수 이름 설명 RDS 기본값 최소값 최대값
xe_session_max_memory 이벤트 버퍼링을 위해 세션에 할당할 최대 메모리를 지정합니다. 이벤트 세션의 max_memory 설정에 해당합니다. 4MB 4MB 8MB
xe_session_max_event_size 대형 이벤트에 허용되는 최대 메모리 크기를 지정합니다. 이벤트 세션의 max_event_size 설정에 해당합니다. 4MB 4MB 8MB
xe_session_max_dispatch_latency 이벤트가 확장 이벤트 세션 대상으로 전달되기 전에 메모리에 버퍼링되는 시간을 지정합니다. 이벤트 세션의 max_dispatch_latency 설정에 해당합니다. 30초 1초 30초
xe_file_target_size 파일 대상의 최대 크기를 지정합니다. 파일 대상의 max_file_size 설정에 해당합니다. 100MB 10MB 1GB
xe_file_retention 이벤트 세션의 파일 대상이 생성한 파일의 보존 기간(일)을 지정합니다. 7일 0일 7일

참고: xe_file_retention을 0으로 설정하면 SQL Server가 이 파일들에 대한 잠금을 해제한 후 .xel 파일이 자동으로 제거됩니다. 잠금은 .xel 파일이 xe_file_target_size에 설정된 크기 한도에 도달할 때마다 해제돼요.

이 매개변수의 현재 값을 보려면 rdsadmin.dbo.rds_show_configuration 저장 프로시저를 사용할 수 있어요. 예를 들어 다음 SQL 문으로 xe_session_max_memory의 현재 설정을 볼 수 있습니다.

exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'

매개변수를 수정할 때는 rdsadmin.dbo.rds_set_configuration 저장 프로시저를 사용해요. 예를 들어 다음 SQL 문으로 xe_session_max_memory를 4MB로 설정합니다.

exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4

Multi-AZ 배포 고려 사항

기본 DB 인스턴스에서 확장 이벤트 세션을 만들면 대기 복제본으로 전파되지 않아요. 장애 조치(fail over) 후 새 기본 DB 인스턴스에서 확장 이벤트 세션을 만들 수 있고, Multi-AZ 구성을 제거한 뒤 다시 추가해 대기 복제본으로 확장 이벤트 세션을 전파할 수도 있어요. RDS는 대기 복제본에서 모든 비기본 확장 이벤트 세션을 중지해 이 세션들이 대기 인스턴스의 리소스를 소비하지 않게 합니다. 따라서 대기 복제본이 기본 DB 인스턴스가 된 후에는 새 기본 인스턴스에서 확장 이벤트 세션을 수동으로 시작해야 해요.

참고: 이 방식은 Always On 가용성 그룹과 데이터베이스 미러링 모두에 적용됩니다.

또한 SQL Server 에이전트 작업을 사용해 대기 복제본을 추적하고, 대기가 기본이 되면 세션을 시작할 수도 있어요. 예를 들어 SQL Server 에이전트 작업 단계에서 다음 쿼리를 사용해 기본 DB 인스턴스에서 이벤트 세션을 다시 시작할 수 있습니다.

BEGIN
    IF (DATABASEPROPERTYEX('rdsadmin','Updateability')='READ_WRITE'
    AND DATABASEPROPERTYEX('rdsadmin','status')='ONLINE'
    AND (DATABASEPROPERTYEX('rdsadmin','Collation') IS NOT NULL OR DATABASEPROPERTYEX('rdsadmin','IsAutoClose')=1)
    )
    BEGIN
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe1')
            ALTER EVENT SESSION xe1 ON SERVER STATE=START
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe2')
            ALTER EVENT SESSION xe2 ON SERVER STATE=START
    END
END

이 쿼리는 중지된 상태인 경우 기본 DB 인스턴스에서 xe1 및 xe2 이벤트 세션을 다시 시작합니다. 이 쿼리에 편리한 간격의 일정(schedule)을 추가할 수도 있어요.

확장 이벤트 파일 조회하기

파일 대상을 사용하는 확장 이벤트의 데이터를 보려면 SQL Server Management Studio 또는 sys.fn_xe_file_target_read_file 함수를 사용할 수 있어요. 이 함수에 대한 자세한 내용은 Microsoft 문서의 "sys.fn_xe_file_target_read_file(Transact-SQL)"을 참고하세요.

확장 이벤트 파일 대상은 RDS for SQL Server에서 D:\rdsdbdata\log 디렉터리에만 파일을 쓸 수 있어요.

예를 들어 다음 SQL 쿼리로 이름이 xe로 시작하는 모든 확장 이벤트 세션의 파일 내용을 조회할 수 있습니다.

SELECT * FROM sys.fn_xe_file_target_read_file('d:\rdsdbdata\log\xe*', null,null,null);

더 알아보기 (Learn more)