AWS DMS는 마이그레이션에 메모리를 어떻게 사용합니까?

5분 분량
0

AWS Database Migration Service(AWS DMS) 태스크에서 메모리를 예상보다 많거나 적게 사용하고 있습니다. AWS DMS는 마이그레이션에 메모리를 어떻게 사용하며, 복제 인스턴스의 메모리 사용량을 최적화하려면 어떻게 해야 합니까?

간략한 설명

AWS DMS 복제 인스턴스는 메모리를 사용하여 복제 엔진을 실행합니다. 이 엔진은 전체 로드 단계 동안 소스 엔진에서 SELECT 문 실행을 담당합니다. 또한 복제 엔진은 CDC(변경 데이터 캡처) 단계 동안 소스 엔진의 트랜잭션 로그에서 읽습니다. 이러한 레코드는 대상으로 마이그레이션된 다음 검증 프로세스의 일부로 대상 데이터베이스의 해당 레코드와 비교됩니다. 이는 AWS DMS에서 일반적인 마이그레이션 흐름이 작동하는 방식입니다.

또한 AWS DMS는 태스크 구성 및 소스에서 대상으로 이동하는 데이터 흐름에 메모리를 사용합니다.

해결 방법

LOB 설정이 제한된 태스크

LOB 설정이 제한된 AWS DMS 태스크를 사용하여 데이터를 마이그레이션하는 경우 각 LOB 열의 LobMaxSize를 기반으로 메모리가 미리 할당됩니다. 이 값을 너무 높게 설정하면 태스크가 실패할 수 있습니다. 마이그레이션하는 레코드 수와 CommitRate에 따라 메모리 부족(OOM) 오류로 인해 태스크가 실패합니다.

따라서 높은 값으로 태스크를 구성하는 경우 AWS DMS 인스턴스에 충분한 메모리가 있는지 확인합니다.

{
  "TargetMetadata": {
  "SupportLobs": true,
  "FullLobMode": false,
  "LobChunkSize": 0,
  "LimitedSizeLobMode": true,
  "LobMaxSize": 63,
  "InlineLobMaxSize": 0,
  }

자세한 내용은 AWS DMS 태스크의 소스 데이터베이스에 대한 LOB 지원 설정을 참조하세요.

ValidationEnabled인 작업

ValidationEnabled=true인 AWS DMS 태스크를 사용하여 마이그레이션하는 경우 추가 메모리 사용량이 발생할 수 있습니다. 이는 AWS DMS가 소스 데이터베이스와 대상 데이터베이스 모두에서 ThreadCount * PartitionSize 레코드를 검색하기 때문에 발생합니다. 그런 다음 복제 인스턴스의 해당 데이터를 비교합니다. 따라서 마이그레이션 중 복제 인스턴스, 소스 데이터베이스 및 대상 데이터베이스에서 추가 메모리 사용량을 관찰할 수 있습니다.

사용 중인 메모리 양을 제한하려면 SkipLobColums를 사용하여 LOB 열을 무시합니다. 별도의 복제 인스턴스 또는 AWS DMS 태스크를 사용하여 마이그레이션 태스크와 별도로 검증을 수행할 수도 있습니다. 이렇게 하려면 ValidationOnly 설정을 사용합니다.

"ValidationSettings": {
  "EnableValidation": true,
  "ThreadCount": 5,
  "PartitionSize": 10000,
  "ValidationOnly": false,
  "SkipLobColumns": false,
  },

자세한 내용은 AWS DMS 데이터 검증을 참조하세요.

전체 부하 및 CDC 단계에 병렬 스레드가 있는 태스크

RDBMS가 아닌 대상을 사용하는 경우 ParallelLoadThreads * ParallelLoadBufferSize는 스레드 수와 대상으로의 데이터 전송 크기를 결정합니다. 마찬가지로 ParallelApplyThreads * ParallelApplyBufferSize는 CDC 단계 중 스레드 수와 데이터 전송 크기를 결정합니다. AWS DMS는 소스에서 가져온 데이터를 ParallelLoadQueuesPerThread 및 ParallelApplyQueuesPerThread에 보관합니다. 이러한 설정을 조정할 때는 AWS DMS 인스턴스와 대상에 워크로드를 처리할 수 있는 용량이 있는지 확인합니다.

{
  "TargetMetadata": {
    "ParallelLoadThreads": 0,
    "ParallelLoadBufferSize": 0,
    "ParallelLoadQueuesPerThread": 0,
    "ParallelApplyThreads": 0,
    "ParallelApplyBufferSize": 0,
    "ParallelApplyQueuesPerThread": 0
  },

이러한 설정에 대한 자세한 내용은 대상 메타데이터 태스크 설정을 참조하세요.

일괄 적용 설정이 있는 태스크

일괄 적용 설정이 있는 AWS DMS 태스크를 사용하는 경우 다음 모범 사례를 사용합니다.

  • 기본 배치 구성은 항상 정상적인 워크로드를 처리하기에 충분합니다. 배치 프로세스에서 배치의 크기와 대상에 적용되는 빈도는 BatchApplyTimeoutMin, BatchApplyTimeoutMax 및 BatchApplyMemoryLimit 설정에 의해 결정됩니다. 이러한 설정은 함께 작동하여 변경 내용을 일괄적으로 적용합니다. 소스의 과중한 워크로드로 인해 이러한 설정을 조정해야 하는 경우 AWS DMS 인스턴스에 충분한 메모리가 있는지 확인합니다. 그렇지 않으면 OOM 오류가 발생할 수 있습니다.
  • BatchApplyMemoryLimit을 복제 인스턴스 메모리 크기보다 크게 설정하지 마세요. 그렇지 않으면 OOM 오류가 발생할 수 있습니다. BatchApplyMemoryLimit을 설정할 때 마이그레이션에 사용 중인 AWS DMS 태스크와 동시에 다른 태스크가 실행되고 있는지 확인합니다.
  • 여러 배치에서 BatchApplyPreserveTransaction = true인 경우 장기 실행 트랜잭션은 메모리에 유지됩니다. 이로 인해 다음 섹션의 메모리 설정에 따라 OOM 오류가 발생할 수도 있습니다.
  • BatchSplitSize 설정을 사용하여 모든 배치에 포함할 변경 사항 수를 설정하고 메모리 사용을 제한합니다.
{
  "TargetMetadata": {
    "BatchApplyEnabled": false,
  },
},
  "ChangeProcessingTuning": {
    "BatchApplyPreserveTransaction": true,
    "BatchApplyTimeoutMin": 1,
    "BatchApplyTimeoutMax": 30,
    "BatchApplyMemoryLimit": 500,
    "BatchSplitSize": 0,
  },

일괄 적용 모드 사용에 대한 자세한 내용은 처리 튜닝 설정 변경을 참조하세요.

기타 메모리 관련 태스크 설정

  • CDC 중에 MinTransactionSize는 각 트랜잭션에서 발생하는 변경 횟수를 결정합니다. 복제 인스턴스의 트랜잭션 크기는 MemoryLimitTotal에 의해 제어됩니다. 많은 메모리가 필요한 여러 CDC 태스크를 실행할 때 이 설정을 사용합니다. 각 태스크의 트랜잭션 워크로드를 기반으로 이 설정을 할당해야 합니다.
  • MemoryKeepTime을 설정하여 소스에서 장기 실행 트랜잭션에 사용되는 메모리를 제한합니다. 또는 소스에서 INSERT 또는 UPDATE 문이 대량으로 실행되는 경우 이 시간을 늘립니다. 처리로 인한 변경 사항을 순 변경 사항 테이블에 유지하려면 이 시간을 늘립니다.
  • StatementCacheSize를 설정하여 복제 인스턴스에 저장되는 준비된 명령문 수를 제어합니다.
  • AWS DMS 복제 인스턴스에 사용 가능한 메모리가 대량으로 포함되어 있는 경우 이 예시의 설정을 조정합니다. 즉, AWS DMS는 AWS DMS 스토리지로 자주 플러싱하는 대신 메모리 자체에서 워크로드를 처리합니다.
"ChangeProcessingTuning": {
    "MinTransactionSize": 1000,
    "CommitTimeout": 1,
    "MemoryLimitTotal": 1024,
    "MemoryKeepTime":
  60,
    "StatementCacheSize": 50
  },

자세한 내용은 처리 튜닝 설정 변경을 참조하세요.

복제 인스턴스의 메모리 사용량 모니터링

복제 인스턴스의 메모리 사용량을 모니터링하는 방법에는 여러 가지가 있습니다. 가장 많은 메모리를 사용하는 단일 태스크를 분리하려면 MemoryUsage를 기준으로 태스크를 정렬합니다. 태스크가 메모리를 차지하고 있는 이유를 알아보려면 CDCChangesMemorySource와 CDCChangesMemoryTarget을 비교한 다음 해당 엔드포인트 문제를 해결합니다.

복제 인스턴스 자체는 최소 메모리를 사용하여 복제 엔진을 실행합니다. 복제 인스턴스에서 추가 AWS DMS 태스크를 실행할 수 있는지 확인하려면 Amazon CloudWatch에서 AvailableMemory 지표를 검토합니다. 그런 다음 사용 가능한 FreeMemory의 양을 사용할 새 작업을 생성합니다. AWS DMS 태스크를 실행할 때 FreeMemory 및 SwapUsage를 모니터링하여 리소스 경합이 문제가 되는지 확인합니다. 자세한 내용은 복제 인스턴스 지표를 참조하세요.

메모리 문제 방지

AWS DMS 태스크에서 사용 중인 메모리의 양을 측정하려면 하위 환경(개발 및 스테이징)에서 동일한 구성으로 인스턴스를 테스트합니다.

또한 프로덕션 데이터로 작업하기 전에 개념 증명 마이그레이션을 수행합니다.


관련 정보

마이그레이션에 적합한 AWS DMS 복제 인스턴스 선택

복제 인스턴스에 가장 적합한 크기 선택

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