Amazon Redshift에서 일대일 모드로 전환된 이유를 해결하려면 어떻게 해야 하나요?

3분 분량
0

AWS Database Migration Service(AWS DMS) 작업을 이용해 데이터를 Amazon Redshift로 마이그레이션하려고 합니다. 그러나 내 작업에 지연이나 데이터 불일치 문제가 있고, “XXXXBulk apply operation failed. Trying to execute bulk statements in 'one-by-one' mode XXXXX”와 같은 로그 항목이 표시됩니다.

간략한 설명

Amazon Redshift는 온라인 분석 프로세싱(OLAP) 데이터 웨어하우스로, 비용 때문에 빈번한 트랜잭션을 처리하지 않습니다. 기본적으로 AWS DMS에서는 일괄 적용 모드를 사용해 변경 사항을 일괄 처리합니다. Redshift를 일대일 모드로 실행하지 않으면 DMS 작업 대상에 변경 내용이 적용되지 않아 데이터 불일치나 지연 시간 문제가 발생했습니다. 일괄 적용 모드를 사용하면 AWS DMS에서는 다음을 실행합니다.

  1. 일괄 적용 설정에서 제어하는 일괄 처리 항목 내 변경된 내용을 수집합니다.
  2. 일괄 처리에서 대상 인스턴스까지 변경 내용 모두를 포함하는 순 변경 사항 테이블을 생성합니다.
  3. 트랜잭션을 그룹화하고 알고리즘을 사용하여 대상에 대량으로 적용합니다.

Amazon Redshift로 데이터를 복제하는 마이그레이션 작업에서 일괄 처리를 적용할 수 없는 경우, AWS DMS에서는 전체 일괄 적용을 실패로 처리하지 않습니다. 대신 일괄 처리를 분류한 후 트랜잭션을 적용할 수 있는 일대일 모드로 전환합니다. 일괄 처리를 실패하도록 만든 트랜잭션을 발견하면 AWS DMS에서 Amazon Redshift 대상의 awsdms_apply_exceptions 테이블에 해당 트랜잭션을 로그합니다. 그리고 해당 일괄 처리 작업의 모든 트랜잭션이 대상에 적용될 때까지 배치에 있는 트랜잭션에 하나씩 적용합니다. 마지막으로, 새 배치에는 일괄 적용 모드로 다시 전환해 일괄 처리가 실패하지 않는 한 일괄 적용을 계속 이어나갑니다.

해결 방법

일괄 처리에 실패하고 AWS DMS가 일대일 모드를 사용했는지 확인하려면 AWS DMS 작업 로그를 확인하세요. 일괄 처리에 실패하고 AWS DMS가 일대일 모드로 전환될 때마다 다음 로그가 표시됩니다.

"[TARGET_APPLY ]I: Bulk apply operation failed. Trying to execute bulk statements in 'one-by-one' mode (bulk_apply.c:2175)"

이 경우 AWS DMS에서는 배치 내 트랜잭션에 문제가 발생할 때까지 순차적으로 트랜잭션을 대상에 적용합니다. 문제가 발생하면 트랜잭션이 로그되고 다음과 유사한 로그가 표시됩니다.

"[TARGET_APPLY ]W: Source changes that would have had no impact were not applied to the target database. Refer to the 'awsdms_apply_exceptions' table for details. (endpointshell.c:5984)"

참고: AWS DMS 작업 설정에서 제어 테이블 스키마를 지정하지 않으면 기본적으로 공개 스키마에 awsdms_apply_exceptions 테이블이 생성됩니다.

AWS DMS는 트랜잭션을 로그한 후, 해당 배치 작업의 모든 트랜잭션 적용을 완료합니다. 그 후 일괄 적용 모드로 다시 전환됩니다. 로그에는 다음과 비슷한 메시지가 표시됩니다.

"[TARGET_APPLY ]I: Switch back to bulk apply mode (bulk_apply.c:4751)"

온라인 트랜잭션 처리(OLTP) 데이터베이스에서 실행하는 트랜잭션 변경 사항은 Amazon Redshift 성능에 영향을 미칠 수 있습니다. AWS DMS는 일괄 적용이 실패하면 일대일 모드로 전환합니다. AWS DMS에서 일대일 모드로 트랜잭션을 실행하면 대상 지연 시간이 늘어납니다. AWS DMS에서 대량 적용으로 다시 전환하면 대상 지연 시간이 줄어듭니다.

이 문제를 해결하려면 Amazon Redshift 대상에 연결하세요. 그런 후 다음 명령을 실행해 awsdms_apply_exceptions 테이블 출력을 가져와 일괄 처리를 실패하게 한 원인 쿼리를 확인합니다.

select \* from public.awsdms\_apply\_exceptions order by 4 desc;

일괄 처리를 실패하게 한 원인 쿼리를 찾은 후 오류를 다시 검토합니다. 문제를 해결해 작업이 일대일 모드로 전환되지 않도록 합니다.

관련 정보

AWS DMS 마이그레이션 디버깅: 문제가 발생하면 어떻게 해야 하나요?

Amazon Redshift 데이터베이스를 AWS 데이터베이스 마이그레이션 서비스 대상으로 사용