AWS DMS 작업에서 높은 소스 대기 시간 문제를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 10월 17일

AWS Database Migration Servicce(AWS DMS) 태스크에서 소스 대기 시간이 높다는 것을 알게 되었습니다. 마이그레이션 중에 소스 대기 시간이 발생하는 이유가 무엇인가요?

간략한 설명

Amazon CloudWatch 지표를 사용하여 AWS DMS 태스크를 모니터링할 수 있습니다. 마이그레이션 중에는 AWS DMS 태스크의 진행 중인 복제 단계인 변경 데이터 캡처(CDC)에서 소스 대기 시간이 발생할 수 있습니다. CDCLatencySource에 대한 CloudWatch 서비스 지표를 사용하여 AWS DMS 태스크의 소스 대기 시간을 모니터링할 수 있습니다. 다음과 같은 경우 AWS DMS 태스크에 소스 대기 시간이 표시될 수 있습니다.

  • 소스 데이터베이스에 제한된 리소스가 있습니다.
  • AWS DMS 복제 인스턴스에 제한된 리소스가 있습니다.
  • 소스 데이터베이스와 AWS DMS 복제 인스턴스 간의 네트워크 속도가 느립니다.
  • AWS DMS는 지속적 복제 중에 소스 데이터베이스의 트랜잭션 로그에서 새로운 변경 사항을 읽습니다.
  • AWS DMS 작업 설정이 적절하지 않거나 LOB(대용량 객체)가 마이그레이션 중입니다.
  • AWS DMS 작업에 사용되는 Oracle 소스 데이터베이스는 지속적 복제를 위해 LogMiner를 사용 중입니다.

해결 방법

소스 데이터베이스에 제한된 리소스가 있습니다. 소스 DB 엔진에 기본 모니터링을 사용하는 것이 가장 좋습니다. 기본 모니터링을 사용하면 데이터베이스에 메모리 경합이나 I/O 포화 상태와 같은 성능 병목 현상을 방지할 수 있습니다.

AWS DMS 복제 인스턴스에 제한된 리소스가 있습니다. CPUUtilization, FreeStorageSpaceFreeableMemory와 같은 복제 인스턴스 지표를 모니터링합니다. 복제 인스턴스에 태스크를 관리할 리소스가 충분한지 확인합니다.

소스 데이터베이스와 AWS DMS 복제 인스턴스 간의 네트워크 속도가 느립니다. 설계상 단일 AWS DMS 태스크는 전체 네트워크 대역폭을 사용할 수 없습니다. 변경이 많은 프로덕션 데이터베이스인 경우 네트워크 대역폭을 늘려야 할 수 있습니다. 예를 들어, AWS Direct Connect 연결을 사용합니다.

AWS DMS는 지속적 복제 중에 소스 데이터베이스의 트랜잭션 로그에서 새로운 변경 사항을 읽습니다. 소스 DB 엔진에 따라 소스 트랜잭션 로그에 커밋되지 않은 데이터가 있을 수도 있습니다. 지속적 복제 중 AWS DMS는 트랜잭션 로그에서 들어오는 변경 사항을 읽습니다. 하지만 AWS DMS는 커밋된 변경 사항만 대상에 전달합니다. 따라서 결과적으로 소스 대기 시간이 발생할 수 있습니다. CDC의 복제 태스크 지표SOURCE_CAPTURE 구성요소에 대한 자세한 디버그 로깅을 모니터링하여 태스크가 진행 중인지 확인합니다.

하지만 소스 데이터베이스가 대용량 데이터 세트를 쓰고 커밋을 더 적게 실행하면 AWS DMS는 트랜잭션 로그의 읽기를 계속 수행합니다. AWS DMS는 전체 트랜잭션이 커밋될 때까지 대상에 변경 사항을 적용하지 않습니다. 이로 인해 소스 대기 시간이 발생할 수도 있습니다. 소스 대기 시간이 증가하기 때문에 대상 대기 시간도 증가합니다.

AWS DMS 태스크 설정이 적절하지 않거나 대용량 객체(LOB)가 마이그레이션 중입니다. AWS DMS는 지속적 복제를 위해 LOB 데이터를 두 단계로 마이그레이션합니다. 먼저, AWS DMS는 LOB가 있는 열을 제외한 모든 열을 포함하는 대상 테이블에 새로운 행을 생성합니다. 그런 다음 AWS DMS는 LOB가 있는 행을 업데이트합니다. LOB 열이 있는 테이블을 자주 업데이트하는 소스 데이터베이스가 있는 경우 소스 대기 시간이 발생할 수 있습니다. 자세한 내용은 대용량 바이너리 객체(LOB) 마이그레이션을 참조하세요.

태스크에 테이블이 너무 많거나 여러 테이블에 LOB 열이 포함된 경우 태스크를 여러 태스크로 분할하세요. 일반적인 트랜잭션에 참여하지 않는 테이블 세트가 있는 경우 마이그레이션을 여러 태스크로 나누세요. 이를 통해 성능을 높일 수 있습니다. 트랜잭션 일관성은 태스크 내에서 유지되므로 별도의 태스크에 있는 테이블은 일반적인 트랜잭션에 참여하지 않는 것이 중요합니다. 또한 각 태스크는 트랜잭션 스트림을 독립적으로 읽으므로 소스 데이터베이스에 너무 많은 스트레스를 주지 마세요. 자세한 내용은 AWS Database Migration Service의 모범 사례를 참조하세요.

AWS DMS 태스크에 사용되는 Oracle 소스 데이터베이스는 지속적 복제를 위해 LogMiner를 사용 중입니다. 소스 데이터베이스에서 많은 수의 재실행 로그를 생성할 경우 지속적 복제에 바이너리 리더 방법을 사용하세요. 소스 데이터베이스가 Oracle Automatic Storage Management(ASM)를 사용하는 경우에도 이 방법을 사용할 수 있습니다. 자세한 내용은 Oracle LogMiner 또는 CDC용 AWS DMS 바이너리 리더 사용을 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?