

# Amazon RDS for Microsoft SQL Server에 확장 이벤트 사용
<a name="SQLServer.ExtendedEvents"></a>

Microsoft SQL Server의 확장 이벤트를 사용하여 Amazon RDS for SQL Server에 대한 디버깅 및 문제 해결 정보를 캡처할 수 있습니다. 확장 이벤트는 Microsoft에서 더 이상 사용되지 않는 SQL 추적 및 서버 프로파일러를 대체합니다. 확장 이벤트는 프로파일러 추적과 유사하지만 추적되는 이벤트를 보다 세부적으로 제어할 수 있습니다. Amazon RDS에서 확장 이벤트는 SQL Server 버전 2016 이상에 대해 지원됩니다. 자세한 내용은 Microsoft 설명서의 [Extended events overview](https://docs.microsoft.com/en-us/sql/relational-databases/extended-events/extended-events)를 참조하세요.

확장 이벤트는 Amazon RDS for SQL Server에서 마스터 사용자 권한이 있는 사용자에 대해 자동으로 활성화됩니다.

**Topics**
+ [제한 및 권장 사항](#SQLServer.ExtendedEvents.Limits)
+ [RDS for SQL Server에 대한 확장 이벤트 구성](#SQLServer.ExtendedEvents.Config)
+ [다중 AZ 배포에 대한 고려 사항](#SQLServer.ExtendedEvents.MAZ)
+ [확장 이벤트 파일 쿼리](#SQLServer.ExtendedEvents.Querying)

## 제한 및 권장 사항
<a name="SQLServer.ExtendedEvents.Limits"></a>

RDS for SQL Server에서 확장 이벤트를 사용하는 경우 다음과 같은 제한 사항이 적용됩니다.
+ 확장 이벤트는 Enterprise 및 Standard Edition에 대해서만 지원됩니다.
+ 기본 확장 이벤트 세션은 변경할 수 없습니다.
+ 세션 메모리 파티션 모드를 `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에 대한 확장 이벤트 구성
<a name="SQLServer.ExtendedEvents.Config"></a>

RDS for SQL Server에서 확장 이벤트 세션의 특정 파라미터 값을 구성할 수 있습니다. 다음 표에서는 구성 가능한 파라미터에 대해 설명합니다.


| 파라미터 이름 | 설명 | RDS 기본값 | 최소값 | 최대값 | 
| --- | --- | --- | --- | --- | 
| xe\$1session\$1max\$1memory | 이벤트 버퍼링을 위해 세션에 할당할 최대 메모리 양을 지정합니다. 이 값은 이벤트 세션의 max\$1memory 설정에 해당합니다. | 4MB | 4MB | 8MB | 
| xe\$1session\$1max\$1event\$1size | 큰 이벤트에 허용되는 최대 메모리 크기를 지정합니다. 이 값은 이벤트 세션의 max\$1event\$1size 설정에 해당합니다. | 4MB | 4MB | 8MB | 
| xe\$1session\$1max\$1dispatch\$1latency | 이벤트가 확장 이벤트 세션 대상으로 전달되기 전에 메모리에서 버퍼링되는 시간을 지정합니다. 이 값은 이벤트 세션의 max\$1dispatch\$1latency 설정에 해당합니다. | 30초 | 1초 | 30초 | 
| xe\$1file\$1target\$1size | 파일 대상의 최대 크기를 지정합니다. 이 값은 파일 대상의 max\$1file\$1size 설정에 해당합니다. | 100MB | 10MB | 1GB | 
| xe\$1file\$1retention | 이벤트 세션의 파일 대상에서 생성된 파일의 보존 시간(일)을 지정합니다. | 7일 | 0일 | 7일 | 

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

`rdsadmin.dbo.rds_show_configuration` 저장 프로시저를 사용하여 이러한 파라미터의 현재 값을 표시할 수 있습니다. 예를 들어 `xe_session_max_memory`의 현재 설정을 보려면 다음 SQL 문을 사용합니다.

```
exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'
```

`rdsadmin.dbo.rds_set_configuration` 저장 프로시저를 사용하여 설정을 수정할 수 있습니다. 예를 들어 `xe_session_max_memory`를 4MB로 설정하려면 다음 SQL 문을 사용합니다.

```
exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4
```

## 다중 AZ 배포에 대한 고려 사항
<a name="SQLServer.ExtendedEvents.MAZ"></a>

기본 DB 인스턴스에서 확장 이벤트 세션을 생성하면 예비 복제본으로 전파되지 않습니다. 장애 조치하고, 새 기본 DB 인스턴스에서 확장 이벤트 세션을 생성할 수 있습니다. 또는 다중 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`를 다시 시작합니다. 이 쿼리에 편리한 간격으로 일정을 추가할 수도 있습니다.

## 확장 이벤트 파일 쿼리
<a name="SQLServer.ExtendedEvents.Querying"></a>

SQL Server Management Studio 또는 `sys.fn_xe_file_target_read_file` 함수를 사용하여 파일 대상을 사용하는 확장 이벤트의 데이터를 볼 수 있습니다. 이 함수에 대한 자세한 내용은 Microsoft 설명서의 [sys.fn\$1xe\$1file\$1target\$1read\$1file(Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/sys-fn-xe-file-target-read-file-transact-sql)을 참조하세요.

확장 이벤트 파일 대상은 RDS for SQL Server의 `D:\rdsdbdata\log` 디렉터리에만 파일을 쓸 수 있습니다.

예를 들어 이름이 `xe`로 시작하는 확장 이벤트 세션의 모든 파일의 내용을 나열하려면 다음 SQL 쿼리를 사용합니다.

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