Como posso solucionar o motivo pelo qual o Amazon Redshift mudou para o modo um por um?

4 minuto de leitura
0

Quero usar uma tarefa do AWS Database Migration Service (AWS DMS) para migrar dados para o Amazon Redshift. Mas minha tarefa tem problemas de latência ou inconsistência de dados, e vejo entradas de log como: “XXXXBulk apply operation failed. Trying to execute bulk statements in 'one-by-one' mode XXXXX”.

Breve descrição

O Amazon Redshift é um data warehouse de processamento analítico on-line (OLAP) que não foi projetado para realizar transações frequentes devido aos custos. Por padrão, o AWS DMS usa o modo Batch Apply para processar as alterações em lotes. Se o Redshift for executado no modo um por um, a tarefa do DMS não aplicou alterações ao destino e causou inconsistência de dados ou problemas de latência. Quando você usa o modo Batch Apply, o AWS DMS faz o seguinte:

  1. Coleta alterações de um lote que as configurações do Batch Apply controlam.
  2. Cria uma tabela de alterações líquidas que contém todas as alterações do lote para a instância de destino.
  3. Usa um algoritmo que agrupa as transações e as aplica em massa ao destino.

Quando uma tarefa de migração que replica dados para o Amazon Redshift não pode aplicar um lote, o AWS DMS não falha em todo o lote. O AWS DMS divide o lote e muda para o modo um por um para aplicar transações. Quando o AWS DMS encontra a transação que causou a falha do lote, ele registra a transação na tabela awsdms_apply_exceptions no destino do Amazon Redshift. Em seguida, o AWS DMS aplica as outras transações no lote, uma por uma, até que todas as transações desse lote sejam aplicadas no destino. Por fim, o AWS DMS volta ao modo Batch Apply para um novo lote e continua usando o Batch Apply, a menos que outro lote falhe.

Resolução

Para ver se seu lote falhou e se o AWS DMS foi usado no modo um por um, verifique o log de tarefas do AWS DMS. Sempre que um lote falha e o AWS DMS muda para o modo um por um, você vê a seguinte entrada de log:

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

Quando isso acontece, o AWS DMS aplica transações sequencialmente no destino até que o AWS DMS encontre um problema com qualquer transação no lote. Se o AWS DMS encontrar um problema, ele registrará a transação e você verá uma entrada de log semelhante à seguinte entrada:

“[TARGET_APPLY ]W: As alterações na origem que não teriam tido impacto não foram aplicadas ao banco de dados de destino. Consulte a tabela “awsdms_apply_exceptions” para obter detalhes. (endpointshell.c:5984)”

Observação: A menos que você especifique um esquema de tabela de controle nas configurações de tarefas do AWS DMS, a tabela awsdms_apply_exceptions é criada no esquema público por padrão.

Depois que o AWS DMS registra a transação, ele conclui a aplicação de todas as transações desse lote. Em seguida, o AWS DMS muda para Batch Apply novamente. Em seus logs, você vê uma mensagem semelhante à seguinte:

“[TARGET_APPLY ]I: Volte para o modo de aplicação em massa (bulk_apply.c:4751)”

As alterações transacionais que você executa a partir de um banco de dados de processamento de transações on-line (OLTP) podem afetar o desempenho do Amazon Redshift. Quando o Batch Apply falha, o AWS DMS muda para o modo um por um. A latência de destino aumenta durante o período em que o AWS DMS executa transações no modo um por um. Depois que o AWS DMS voltar para o Bulk Apply, a latência de destino diminui.

Para resolver esse problema, conecte-se ao destino do Amazon Redshift. Em seguida, execute o comando a seguir para obter a saída da tabela awsdms_apply_exceptions para identificar a consulta que causou a falha do lote:

select * from public.awsdms_apply_exceptions order by 4 desc;

Depois de encontrar a consulta que causou a falha do lote, revise o erro. Resolva o problema para que as tarefas não passem para o modo um por um.

Informações relacionadas

Depurando suas migrações do AWS DMS: o que fazer quando algo dá errado?

Como usar um banco de dados do Amazon Redshift como destino para o AWS Database Migration Service

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos