DMS 일괄 적용 기능을 사용하여 CDC 복제 성능을 향상시키려면 어떻게 해야 합니까?

6분 분량
0

전체 로드와 변경 데이터 캡처(CDC) AWS Database Migration Service(AWS DMS) 태스크를 실행하고 있습니다. 소스 지연 시간이 높지는 않지만 대상 지연 시간이 높거나 증가하고 있습니다. CDC 복제 단계의 속도를 높이려면 어떻게 해야 합니까?

간략한 설명

AWS DMS는 다음 방법을 사용하여 변경 데이터 캡처(CDC) 단계에서 데이터를 복제합니다.

  • 트랜잭션 적용
  • 일괄 적용

AWS DMS CDC 프로세스는 기본적으로 단일 스레드입니다(트랜잭션 적용). 이것은 다른 모든 온라인 트랜잭션 처리(OLTP) 데이터베이스 엔진과 마찬가지로 SQL 복제에 사용되는 동일한 방법입니다. DMS CDC 복제는 소스 데이터베이스 트랜잭션 로그에 종속됩니다. 진행 중인 복제 단계에서 DMS는 다음과 같이 트랜잭션 적용 방법을 사용하여 변경 사항을 적용합니다.

  1. DMS는 트랜잭션 로그의 변경 사항을 소스에서 복제 DB 인스턴스 메모리로 읽어 들입니다.
  2. DMS는 변경 사항을 변환한 다음 이를 정렬기 구성 요소에 전달합니다.
  3. 정렬기 구성 요소는 트랜잭션을 커밋 순서로 정렬한 다음 순차적으로 대상에 전달합니다.

소스 DB의 변경 비율이 높으면 이 프로세스에 시간이 걸릴 수 있습니다. DMS가 소스 DB로부터 많은 양의 수신 워크로드를 받을 때 CDC 대상 지연 시간 지표가 급증하는 것을 볼 수 있습니다.

DMS는 단일 스레드 복제 방법을 사용하여 CDC 변경 사항을 처리합니다. DMS는 배치를 사용하여 대상의 변경 사항을 신속하게 처리할 수 있도록 BatchApplyEnabled 태스크 수준 설정을 제공합니다. BatchApplyEnabled는 소스 DB에 대한 워크로드가 높고 대상 CDC 지연 시간이 긴 경우에 유용합니다. 기본적으로 DMS는 BatchApplySetting을 비활성화합니다. AWS 명령줄 인터페이스(AWS CLI)를 사용하여 활성화할 수도 있습니다.

일괄 적용 작동 방식

BatchApplyEnabled를 사용하여 태스크를 실행하면 DMS는 다음과 같은 방식으로 변경 사항을 처리합니다.

  1. DMS가 소스 DB 트랜잭션 로그에서 변경 사항을 일괄 수집합니다.
  2. DMS가 배치의 모든 변경 사항을 포함하는 순 변경 테이블이라는 테이블을 생성합니다.
  3. 이 테이블은 복제 DB 인스턴스의 메모리에 상주하며 대상 DB 인스턴스에 전달됩니다.
  4. DMS는 순 변경 테이블의 모든 변경 사항을 실제 대상 테이블에 걸러내는 순 변경 알고리즘을 적용합니다.

예를 들어 BatchApplyEnabled를 사용하여 DMS 태스크를 실행하며 단일 배치 안에 새로운 행 삽입 1개, 해당 행에 대한 업데이트 10개, 해당 행에 대한 삭제 1개가 있는 경우 DMS는 이 모든 트랜잭션을 걸러내고 수행하지 않습니다. 결국에는 행이 삭제되고 더 이상 존재하지 않기 때문입니다. 이 프로세스는 대상에 적용되는 실제 트랜잭션 수를 줄입니다.

BatchApplyEnabled는 특정 태스크의 배치 내에서 테이블의 행 수준에서 순 변경 알고리즘을 적용합니다. 따라서 소스 데이터베이스가 자주 변경(업데이트, 삭제 및 삽입)되거나 동일한 행에 이러한 워크로드의 조합이 있는 경우에는 BatchApplyEnabled를 사용함으로써 최적의 결과를 얻을 수 있습니다. 이렇게 하면 대상에 적용될 변경 사항이 최소화됩니다. 수집된 배치에 고유한 변경 사항(서로 다른 행 레코드에 대한 업데이트/삭제/삽입 변경 사항)만 있으면 순 변경 테이블 알고리즘 프로세스는 이벤트를 필터링할 수 없습니다. 따라서 배치 모드에서 모든 배치 이벤트가 대상에 적용됩니다. 일괄 적용이 작동하기 위해서는 테이블에 기본 키 또는 고유 키가 있어야 합니다.

DMS는 변경 처리 튜닝을 위한 BatchApplyPreserveTransaction 설정도 제공합니다. BatchApplyEnabled을 활성화하면 기본적으로 BatchApplyPreserveTransaction이 활성화됩니다. true로 설정하면 트랜잭션 무결성이 유지됩니다. 배치는 소스의 트랜잭션 내의 모든 변경 사항을 포함하도록 보장됩니다. 이 설정은 Oracle 대상 엔드포인트에만 적용됩니다.

참고: 이 설정의 장점과 단점에 주의하세요. BatchApplyPreserveTransaction 설정이 true이면 DMS가 복제 DB 인스턴스의 메모리에서 장기 실행 트랜잭션 전체를 캡처합니다. MemoryLimitTotalMemoryKeepTime 태스크 설정에 따라 캡처하며, 변경 사항을 순 변경 테이블에 보내기 전에 필요에 따라 교체합니다. BatchApplyPreserveTransaction 설정이 false일 때는 단일 트랜잭션의 변경 사항이 여러 개의 배치로 확장될 수 있습니다. 부분적으로 적용될 때는 대상 데이터베이스를 사용할 수 없는 등의 이유로 데이터가 손실될 수 있습니다.

DMS 지연 시간 및 일괄 적용 프로세스에 대한 자세한 내용은 AWS DMS 마이그레이션 디버깅 블로그의 2부3부를 참조하세요.

일괄 적용 사용 사례

다음과 같은 상황에서 일괄 적용을 사용할 수 있습니다.

  • 태스크의 소스에서 캡처된 트랜잭션 수가 많고 이로 인해 대상 지연 시간이 발생합니다.
  • 태스크의 소스에 동일 행의 삽입, 업데이트, 삭제 조합인 워크로드가 있습니다.
  • 대상에서 엄격한 참조 무결성을 유지할 필요가 없습니다(비활성화된 FK).

제한 사항

일괄 적용에는 현재 다음과 같은 제한 사항이 있습니다**.**

  • Amazon Redshift 대상은 기본적으로 일괄 적용을 사용합니다. Amazon Simple Storage Service(Amazon S3) 대상은 트랜잭션 적용을 사용하도록 강제됩니다.
  • 일괄 적용은 기본 키/고유 인덱스가 있는 테이블에서만 작동할 수 있습니다. 기본 키/고유 인덱스가 없는 테이블의 경우, 대량 적용은 삽입만 대량 모드로 적용하고 업데이트 및 삭제는 하나씩 수행합니다. 테이블에 기본 키/고유 인덱스가 있는데 one-by-one 모드로 전환되는 경우 AWS DMS 태스크 중에 대량 태스크가 실패하여 Amazon Redshift가 one-by-one 모드로 전환된 원인을 해결하려면 어떻게 해야 합니까?를 참조하세요.
  • LOB 열이 복제에 포함된 경우에는 제한된 LOB 모드로만 BatchApplyEnabled를 사용할 수 있습니다. 자세한 내용은 대상 메타데이터 태스크 설정을 참조하세요.
  • BatchApplyEnabled가 true로 설정된 경우, 대상 테이블에 고유한 제약 조건이 있으면 AWS DMS에서 오류 메시지를 생성합니다.

해결 방법

참고: AWS 명령줄 인터페이스(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

BatchApplySetting은 기본적으로 비활성화되어 있습니다. AWS CLI를 사용하거나 AWS DMS 콘솔을 사용하여 이 설정을 활성화할 수 있습니다. 배치 설정을 활성화하기 전에 시스템에서 다음 설정 태스크를 완료하세요.

기존 태스크의 배치 설정 상태를 확인합니다.

  1. AWS DMS 콘솔을 엽니다.
  2. 탐색 창에서 [데이터베이스 마이그레이션 태스크(Database migration tasks)]를 선택합니다.
  3. 해당 태스크를 선택한 다음 [태스크 설정(Task Setting)(JSON)]을 선택합니다. JSON에서 BatchApplyEnabled비활성화(disabled) 상태로 표시됩니다.

AWS CLI를 사용하여 배치 설정 활성화

  1. AWS CLI가 설치된 시스템을 엽니다.
  2. aws configure 명령을 실행하여 AWS CLI 프롬프트를 엽니다.
  3. AWS 액세스 키 ID를 입력한 다음 Enter 키를 누릅니다.
  4. AWS 보안 키 ID를 입력한 다음 Enter 키를 누릅니다.
  5. DMS 리소스의 리전 이름을 입력한 다음 Enter 키를 누릅니다.
  6. 출력 형식을 입력한 다음 Enter 키를 누릅니다.
  7. 태스크 ARN 및 배치 설정 조건과 함께 modify-replication-task 명령을 실행합니다.

참고: 태스크를 수정하기 전에 태스크가 stopped 상태인지 확인하세요. 태스크에 따라 다음 명령에서 ARN을 변경한 후에 명령을 실행하여 태스크 설정을 변경합니다.

AWS CLI에서 명령이 성공적으로 실행되면 DMS 콘솔을 열고 태스크의 배치 설정 상태를 다시 확인합니다. 이제 BatchApplyEnabled가 **태스크 설정(Task Setting)(JSON)**에서 “활성화”된 것으로 표시됩니다.

이제 DMS 태스크를 시작하고 마이그레이션 성능을 관찰할 수 있습니다.

aws dms modify-replication-task --replication-task-arn arn:aws:dms:us-east-1:123456789123:task:4VUCZ6ROH4ZYRIA25M3SE6NXCM --replication-task-settings "{\"TargetMetadata\":{\"BatchApplyEnabled\":true}}"

AWS DMS 콘솔을 사용하여 배치 설정 활성화

  1. AWS DMS 콘솔을 엽니다.
  2. 탐색 창에서 [데이터베이스 마이그레이션 태스크(Database migration tasks)]를 선택합니다.
  3. 태스크를 선택한 다음 [수정(Modify)]을 선택합니다.
  4. [태스크 설정(Task settings)] 섹션에서 [JSON 편집기(JSON editor)]를 선택합니다.
  5. 변경할 태스크 설정을 수정합니다. 예를 들어 TargetMetadata 섹션에서 BatchApplyEnabledtrue로 변경합니다(기본값은 false).
  6. [저장(save)]을 클릭하여 태스크를 수정합니다.

다음 단계를 수행하여 변경 사항이 적용되었는지 확인합니다.

  1. 태스크 목록 페이지에서 수정한 태스크를 선택합니다.
  2. [개요 세부 정보(Overview details)] 탭에서 [태스크 설정(Task settings)(JSON)]을 확장합니다.
  3. 태스크에 대한 태스크 설정을 검토합니다.

배치 모드에서 태스크를 실행한 후 CDCLatencyTarget이 높은 문제 해결

배치 모드에서 태스크를 실행한 후 CDCLatencyTarget이 높으면 다음이 지연 시간의 원인일 수 있습니다.

  • 기본 및 보조 인덱스 부족으로 대상에서 오래 실행되는 트랜잭션
  • 대상에서 워크로드를 처리할 수 있는 리소스의 부족
  • DMS 복제 인스턴스의 리소스 경합이 많음

이러한 문제를 해결하려면 DMS 모범 사례를 따르세요.


관련 정보

AWS DMS 태스크 모니터링

데이터베이스 마이그레이션을 스크립팅하는 방법

AWS DMS 마이그레이션 태스크 자동화

AWS DMS를 사용하여 원본 또는 대상 엔드포인트를 생성하려면 어떻게 해야 합니까?

처리 튜닝 설정 변경

AWS 공식
AWS 공식업데이트됨 2년 전