Amazon RDS SQL Server DB 인스턴스에서 교착 상태 이벤트가 발생할 때 알림을 받으려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 6월 2일

SQL Server를 실행하는 Amazon Relational Database Service(Amazon RDS) DB 인스턴스가 있습니다. RDS DB 인스턴스에서 교착 상태 이벤트가 발생하는 즉시 알림을 받고 싶습니다. 어떻게 해야 합니까?

간략한 설명

SQL Server는 잠금 모니터 스레드를 사용하여 교착 상태 이벤트를 모니터링합니다. 교착 상태 이벤트가 감지되면 SQL Server는 리소스/비용 기반 메커니즘을 사용하여 트랜잭션 중 하나를 교착 상태 피해자로 선언합니다. 피해자 트랜잭션이 롤백되고 오류 코드 1205가 오류 로그에 게시됩니다.

이 문제를 해결하려면 교착 상태 추적 플래그(1222, 1204)를 활성화하여 SQL 오류 로그에서 교착 상태 이벤트를 캡처합니다. 그런 다음 SQL Server 오류 로그를 Amazon CloudWatch에 게시하고 교착 상태가 발생할 때마다 알림을 전송하는 CloudWatch 경보 및 Amazon Simple Notification Service(Amazon SNS) 알림을 생성합니다.

​해결 방법

RDS 파라미터 그룹을 통해 추적 플래그 활성화

참고: 기존 사용자 지정 파라미터 그룹이 있는 경우 5단계로 건너뜁니다.

  1. Amazon RDS 콘솔을 열고 탐색 창에서 [파라미터 그룹]을 선택합니다.
  2. [파라미터 그룹 생성]을 선택합니다.
  3. [파라미터 그룹 패밀리]에서 사용 중인 SQL Server 버전 및 에디션을 선택합니다. 예를 들어 SQL Server 2016 Enterprise Edition인 경우 sqlserver-ee-13.0을 사용합니다.
  4. [그룹 이름] 및 [설명]을 입력하고 [생성]을 선택합니다.
  5. [파라미터 그룹] 페이지에서 이전 단계에서 생성한 그룹을 선택합니다.
  6. [파라미터 편집]을 선택하고 12041222 옆의 확인란을 선택합니다.
  7. 1204 및 1222의 []을 [1]로 수정합니다.
  8. [변경 사항 미리보기]를 선택합니다. 다음 페이지에서 [변경 사항 저장]을 선택합니다.
  9. 탐색 창에서 [데이터베이스]를 선택합니다.
  10. [DB 식별자] 섹션에서 RDS DB 인스턴스를 선택합니다.
  11. [수정]을 선택합니다.
  12. [데이터베이스 옵션] 섹션의 [DB 파라미터 그룹]에서 앞서 생성한 파라미터 그룹을 선택합니다.

    참고: 새 파라미터 그룹을 생성하여 RDS DB 인스턴스에 연결하려면 RDS DB 인스턴스를 재부팅하여 변경 사항을 적용해야 합니다.

SQL Server 오류 로그를 Amazon CloudWatch로 푸시

  1. [오류 로그] 섹션에서 [오류 로그] 확인란을 선택합니다. 이렇게 하면 SQL Server 오류 로그가 CloudWatch Logs에 게시됩니다.
  2. [계속]을 선택합니다.
  3. [수정 사항 예약] 섹션에서 [즉시 적용]을 선택한 다음 [DB 인스턴스]를 선택합니다.

    참고: RDS DB 인스턴스가 현재 수정 중 상태입니다. 사용 가능한 상태로 돌아갈 때까지 기다리십시오. 기존 파라미터 그룹을 사용한 경우 RDS DB 인스턴스를 재부팅할 필요가 없으므로 4단계를 건너뜁니다. 새 파라미터 그룹을 생성한 경우 4단계로 진행합니다.

  4. [데이터베이스] 페이지에서 RDS DB 인스턴스를 선택한 다음 [작업]을 선택합니다. RDS DB 인스턴스를 재부팅하여 변경 사항을 적용합니다.

RDS DB 인스턴스가 온라인 상태가 되면 RDS DB 인스턴스에서 DBCC TRACESTATUS (1222, 1204)를 실행하여 교착 상태 추적 상태를 확인할 수 있습니다. 전역 추적 명령의 출력 창에 1이 반환되면 교착 상태 추적이 활성화되어 있는 것입니다.

교착 상태 트랜잭션 시뮬레이션

RDS DB 인스턴스에서 교착 상태 트랜잭션을 시뮬레이션하여 교착 상태 피해자 쿼리가 SQL Server 오류 로그에 기록되는지 확인합니다. RDS DB 인스턴스에서 다음 쿼리를 실행하여 SQL Server 오류 로그의 교착 상태 이벤트를 확인할 수 있습니다.

sp_readerrorlog 0, 1, 'deadlock'

필터 패턴 및 Amazon CloudWatch 경보 생성

  1. CloudWatch 콘솔을 엽니다.
  2. [로그] 섹션에서 [로그 그룹]을 선택합니다.
  3. RDS DB 인스턴스의 SQL Server 오류 로그를 선택합니다. 이 로그는 다음 형식으로 나열됩니다.

    (/aws/rds/instance/<Your-RDS-Instance-Name>/error)

  4. [지표 필터 생성]을 선택합니다.
  5. [로그 지표 필터 정의] 페이지의 [필터 패턴] 섹션에 Deadlock을 입력합니다.
  6. [지표 할당]을 선택합니다.
  7. [필터 이름] 및 [지표 이름] 필드에 Deadlock을 입력합니다.
  8. [필터 생성]을 선택합니다. 교착 상태 필터가 생성되고 나면 [경보 생성]을 선택합니다.
  9. [지표 및 조건 지정] 페이지의 [지표 이름]에 Deadlock을 입력합니다.
  10. [통계]에 [Minimum]을 입력합니다.
  11. [기간]의 드롭다운 메뉴에서 경보 기간을 선택합니다(예: 1분).
  12. [조건] 섹션에서 다음 설정을 선택합니다.

    임계값 유형: [정적]

    교착 상태가 다음과 같을 때마다: 임계값 보다 큼

    결과: 0 입력

  13. [다음]을 선택합니다.
  14. [알림] 섹션의 [경보 상태 트리거]에서 [경보 중]을 선택합니다.
  15. Amazon SNS 주제를 선택하거나, 알림을 수신할 이메일 주소를 사용하여 [새 주제 생성]을 선택한 후 [다음]을 선택합니다.
  16. [이름 및 설명] 섹션에서 [경보 이름] 및 [경보 설명]을 입력하고 [다음]을 선택합니다.
  17. [미리보기 및 생성] 페이지에서 경보 구성을 검토한 후 [경보 생성]을 선택합니다.

같은 프로세스를 사용하여 다른 SQL Server 심각한 오류 및 로그인 실패 오류에 대한 CloudWatch 경보를 생성합니다. 이를 통해 데이터베이스 시스템에 큰 문제가 발생하기 전에 많은 SQL Server 오류를 식별하고 알림을 받을 수 있습니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?