DynamoDB TransactionConflictException

TL;DR — Outra transação já está operando no mesmo item da sua solicitação, então DynamoDB rejeitou a sua para preservar o isolamento. É uma contenção transitória, não um bug nos seus dados – tente novamente com espera exponencial, mantenha as transações pequenas e reduza as escritas simultâneas no mesmo item importante.

O que significa

TransactionConflictException: Transaction is ongoing for the item

DynamoDB serializa escritas conflitantes em transações em andamento. Você atinge esta exceção quando um PutItem, UpdateItem ou DeleteItem simples colide com um TransactWriteItems em voo que inclui o mesmo item. Em vez de bloquear, o DynamoDB rejeita a gravação de item único com TransactionConflictException (HTTP 400). é possível tentar novamente — o conflito é resolvido assim que a outra transação é confirmada ou abortada.

Observe a distinção de TransactionCanceledException: quando a solicitação perdida é ela própria um TransactWriteItems ou TransactGetItems, o DynamoDB cancela toda a transação — você obtém um cancelamento cujo CancellationReasons carrega TransactionConflict como o código de motivo por item, não esta exceção.

Por que isso acontece

  • Gravações simultâneas no mesmo item — um PutItem/UpdateItem simples se sobrepõe a um TransactWriteItems em voo tocando esse item.
  • Duas transações compartilhando um item — duas solicitações TransactWriteItems incluem a mesma chave ao mesmo tempo; um vence, o outro é cancelado com um código de motivo TransactionConflict (apresentado como TransactionCanceledException).
  • Um item importante sob muitas atualizações simultâneas — por exemplo, um contador compartilhado ou uma única linha agregada a cada solicitação é atualizada.
  • Transações longas ou grandes contendo itens por tempo suficiente para se sobreporem a outros redatores.
  • Uma tempestade de novas tentativas — novas tentativas sem espera acumulam mais tentativas simultâneas no mesmo item contestado.

Como corrigir

  1. Tente novamente com espera exponencial + jitter. Esta é a solução principal — o conflito é transitório e desaparece quando a outra transação é resolvida. Mantenha o jitter para que as novas tentativas não sejam ressincronizadas em outra colisão.
  2. Mantenha as transações pequenas e curtas — menos itens por TransactWriteItems significa retenções mais curtas e menos sobreposição.
  3. Reduza a contenção em itens importantes — fragmente um contador ativo em vários itens e agregue-o ou use um contador atômico com um UpdateItem simples (ADD) em vez de uma transação quando você não precisar da semântica de tudo ou nada.
  4. Não misture uma transação e uma gravação simples no mesmo item simultaneamente se puder evitá-lo — encaminhe ambas pelo mesmo caminho.
  5. Monitore a métrica TransactionConflict CloudWatch para ver se a contenção está aumentando e onde.

Inspecione no DynoTable

Quando o escritor simultâneo é você, edições manuais em lote por meio de teste (⌘S) — DynoTable as confirma como uma gravação revisada em vez de um fluxo de atualizações sobrepostas de item único. Abra itens contestados com ⌘K e inspecione o estado ativo antes de tentar novamente.

Dimensione o tráfego transacional com a calculadora de preços. Alternar perfis com ⌘P; Testar conexão em Configurações → Perfis. Consulte Conectar ao AWS e Instalar.

Fontes

FAQ

Como faço para corrigir TransactionConflictException em DynamoDB? Tente novamente a solicitação com espera e instabilidade exponenciais — o conflito é uma contenção transitória com outra transação em andamento no mesmo item. Além disso, mantenha as transações pequenas, fragmente itens importantes e evite executar uma transação e uma gravação simples no mesmo item simultaneamente.

TransactionConflictException é o mesmo que TransactionCanceledException? Não. TransactionConflictException significa que outra transação está operando no item. TransactionCanceledException significa que uma transação inteira foi revertida; seus CancellationReasons explicam o porquê, e um conflito de transação pode ser um desses motivos.

Erros relacionados

Referências

Última verificação em 13/07/2026 em relação à documentação oficial do AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.