Ir para o conteúdo

Como faço para otimizar o uso de memória do AWS DMS para migração?

7 minuto de leitura
0

Eu tenho uma tarefa do AWS Database Migration Service (AWS DMS) que usa mais ou menos memória do que o esperado. Quero otimizar o uso de memória da minha instância de replicação.

Breve descrição

Uma instância de replicação do AWS DMS usa memória para executar o mecanismo de replicação. Esse mecanismo executa instruções SELECT no mecanismo de origem durante a fase de carga total. Além disso, o mecanismo de replicação lê o log de transação do mecanismo de origem durante a fase de captura de dados de alteração (change data capture, CDC). O AWS DMS migra esses registros para o destino e, em seguida, os compara com os registros correspondentes no banco de dados de destino durante o processo de validação.

O AWS DMS também usa memória para configuração de tarefas e para o fluxo de dados da origem para o destino.

Resolução

Otimize a memória para tarefas com configurações de LOB limitadas

Quando você usa uma tarefa do AWS DMS com configurações de objeto binário grande (large binary object, LOB) limitadas para migrar dados, o AWS DMS aloca memória com base no LobMaxSize para cada coluna de LOB. Se você definir esse valor muito alto, sua tarefa pode apresentar falha. Essa falha ocorre devido a um erro “Out of Memory (OOM)”, com base no número de registros que você está migrando e no CommitRate.

Se você configurar sua tarefa com valores altos, verifique suas configurações de tarefa para garantir que a instância do AWS DMS tenha memória suficiente.

Exemplo de configurações de tarefas JSON:

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

Para mais informações, consulte Configurando o suporte LOB para bancos de dados de origem em uma tarefa AWS DMS.

Otimize a memória para tarefas com ValidationEnabled

Se você usar uma tarefa do AWS DMS com a configuração ValidationEnabled=true durante a migração, poderá ocorrer um uso extra de memória. Isso acontece porque o AWS DMS recupera registros ThreadCount e PartitionSize dos bancos de dados de origem e de destino. Em seguida, o AWS DMS compara os dados correspondentes na instância de replicação. Portanto, você vê um uso extra de memória na instância de replicação, no banco de dados de origem e no banco de dados de destino durante a migração.

Para limitar a quantidade de memória em uso, use SkipLobColumns para ignorar as colunas de LOB. Também é possível realizar a validação separadamente da tarefa de migração se usar uma instância de replicação separada ou uma tarefa do AWS DMS. Para fazer isso, use a configuração ValidationOnly:

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

Para obter mais informações, consulte AWS Validação de dados do DMS.

Otimize a memória para tarefas com threads paralelos em fases de carga total e CDC

Quando você usa um destino de banco de dados não relacional (RDBMS), ParallelLoadThreads e ParallelLoadBufferSize determinam o número de threads e o tamanho da transferência de dados para o destino. ParallelApplyThreads e ParallelApplyBufferSize determinam o número de threads e o tamanho da transferência de dados durante a fase CDC. O AWS DMS armazena os dados que você extrai da origem em ParallelLoadQueuesPerThread e ParallelApplyQueuesPerThread. Ao ajustar essas configurações, certifique-se de que a instância e o destino do AWS DMS tenham a capacidade de lidar com o workload.

Exemplo de configurações:

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

Para obter mais informações sobre essas configurações, consulte Configurações de tarefa de metadados de destino.

Otimize a memória para tarefas com configurações de aplicação em lote

Quando você usa uma tarefa do AWS DMS com configurações de aplicação em lote, a configuração de lote padrão pode lidar com o workload normal. No processo em lote, as configurações BatchApplyTimeoutMin, BatchApplyTimeoutMax e BatchApplyMemoryLimit determinam o tamanho do lote e a frequência da aplicação do lote no destino. Essas configurações funcionam em conjunto para aplicar alterações em lote. Se você precisar ajustar essas configurações devido ao workload pesado na origem, certifique-se de que a instância do AWS DMS tenha memória suficiente. Caso contrário, poderá ocorrer um erro de OOM.

Certifique-se de não definir BatchApplyMemoryLimit para mais do que o tamanho da memória da instância de replicação, caso contrário poderá ocorrer um erro de OOM. Observe as outras tarefas que são executadas simultaneamente com a tarefa do AWS DMS que você está usando para migração ao definir BatchApplyMemoryLimit.

Se você definir BatchApplyPreserveTransaction como verdadeiro em vários lotes, o AWS DMS reterá transações de longa duração na memória. Isso também pode causar erros de OOM, com base nas configurações de memória.

Para definir o número de alterações a serem incluídas em cada lote e limitar o consumo de memória, use a configuração BatchSplitSize.

Exemplo de configurações:

{
  "TargetMetadata": {
    "BatchApplyEnabled": false,
  },
},
  "ChangeProcessingTuning": {
    "BatchApplyPreserveTransaction": true,
    "BatchApplyTimeoutMin": 1,
    "BatchApplyTimeoutMax": 30,
    "BatchApplyMemoryLimit": 500,
    "BatchSplitSize": 0,
  },

Use configurações de tarefa relacionadas à memória

Durante a fase CDC, MinTransactionSize determina quantas mudanças acontecem em cada transação. MemorylimitTotal controla o tamanho das transações na instância de replicação. Ao executar várias tarefas do CDC que precisam de muita memória, use essas configurações com valores baseados no workload transacional de cada tarefa.

Para limitar a memória que as transações de longa duração na origem consomem, use a configuração MemoryKeepTime. Ou, se grandes lotes de instruções INSERT ou UPDATE estiverem em execução na origem, aumente esse tempo. Aumente esse tempo para reter as alterações do processamento na tabela de alterações líquidas.

Para controlar o número de instruções preparadas que o AWS DMS armazena na instância de replicação, use a configuração StatementCacheSize.

Se sua instância de replicação do AWS DMS contiver um grande volume de memória livre, ajuste as configurações de forma semelhante ao exemplo a seguir:

"ChangeProcessingTuning": {
    "MinTransactionSize": 1000,
    "CommitTimeout": 1,
    "MemoryLimitTotal": 1024,
    "MemoryKeepTime":
  60,
    "StatementCacheSize": 50
  },

Esse exemplo usa configurações que permitem que o AWS DMS lide com o workload na própria memória. Isso significa que o AWS DMS não costuma descarregar para o armazenamento.

Para obter mais informações sobre essas configurações, consulte Configurações de ajuste de processamento de alterações.

Monitore o uso da memória de sua instância de replicação

Para monitorar o uso da memória da sua instância de replicação, classifique suas tarefas por MemoryUsage para isolar a tarefa que consome mais memória. Para saber por que a tarefa está retendo memória, compare CDCChangesMemorySource e CDCChangesMemoryTarget. Em seguida, solucione o problema do endpoint respectivo.

A instância de replicação usa o mínimo de memória para executar o mecanismo de replicação. Para verificar se tarefas extras do AWS DMS podem ser executadas na instância de replicação, consulte a métrica AvailableMemory no Amazon CloudWatch. Em seguida, crie uma nova tarefa para usar a quantidade de FreeMemory disponível. Ao executar a tarefa do AWS DMS, monitore o FreeMemory e SwapUsage para ver se a contenção de recursos é uma preocupação. Para obter mais informações, consulte Métricas de instâncias de replicação.

Teste o uso da memória

Para medir a quantidade de memória que sua tarefa do AWS DMS usa, teste uma instância com a mesma configuração em um ambiente de desenvolvimento ou teste.

Faça uma migração de prova de conceito antes de migrar os dados de produção.

Informações relacionadas

Escolhendo a instância de replicação AWS DMS certa para sua migração

Seleção do melhor tamanho para uma instância de replicação

AWS OFICIALAtualizada há 4 meses