DynamoDBEccezioneConflittoTransazione

TL;DR — Un'altra transazione è già operativa sullo stesso articolo della tua richiesta, quindi DynamoDB ha rifiutato la tua per preservare l'isolamento. Si tratta di un conflitto temporaneo, non di un bug nei dati: riprova con un backoff esponenziale, mantieni le transazioni di piccole dimensioni e riduci le scritture simultanee sullo stesso elemento importante.

Cosa significa

TransactionConflictException: Transaction is ongoing for the item

DynamoDB serializza scritture contrastanti rispetto alle transazioni in volo. Si verifica questa eccezione quando un semplice PutItem, UpdateItem o DeleteItem entra in collisione con un TransactWriteItems in volo che include lo stesso elemento. Invece di bloccare, DynamoDB rifiuta la scrittura di un singolo elemento con TransactionConflittiException (HTTP 400). È riprovabile: il conflitto viene risolto una volta che l'altra transazione viene confermata o interrotta.

Nota la distinzione da TransactionCanceledException: quando la richiesta persa è essa stessa un TransactWriteItems o TransactGetItems, DynamoDB annulla invece l'intera transazione: ottieni una cancellation i cui CancellationReasons riportano TransactionConflect come codice motivo per articolo, non questa eccezione.

Perché succede

  • Scritture simultanee sullo stesso elemento: un semplice PutItem/UpdateItem si sovrappone a un TransactWriteItems in volo che tocca quell'elemento.
  • Due transazioni che condividono un elemento: due richieste TransactWriteItems includono la stessa chiave contemporaneamente; uno vince, l'altro viene annullato con un codice motivo "TransactionConflitto" (emerso come "TransactionCanceledException").
  • Un elemento importante sottoposto a numerosi aggiornamenti simultanei — ad es. un contatore condiviso o una singola riga aggregata ogni richiesta viene aggiornata.
  • Transazioni lunghe o grandi che contengono elementi abbastanza a lungo da sovrapporsi ad altri scrittori.
  • Una tempesta di tentativi: i tentativi senza backoff accumulano più tentativi simultanei sullo stesso oggetto conteso.

Come risolverlo

  1. Riprova con backoff esponenziale + jitter. Questa è la soluzione principale: il conflitto è temporaneo e si risolve quando l'altra transazione viene risolta. Mantieni il jitter in modo che i nuovi tentativi non si risincronizzino in un'altra collisione.
  2. Mantieni le transazioni piccole e brevi: meno elementi per "TransactWriteItems" significa sospensioni più brevi e meno sovrapposizioni.
  3. Riduci la contesa sugli elementi importanti: suddividi un contatore attivo su più elementi e aggregalo oppure utilizza un contatore atomico con un semplice UpdateItem (ADD) invece di una transazione quando non hai bisogno della semantica tutto o niente.
  4. Non mischiare una transazione e una scrittura semplice sullo stesso oggetto contemporaneamente se puoi evitarlo: indirizzale entrambe attraverso lo stesso percorso.
  5. Monitora il parametro CloudWatch TransactionConflict per vedere se il conflitto sta aumentando e dove.

Ispeziona in DynoTable

Quando lo scrittore simultaneo sei tu, le modifiche manuali in batch tramite la gestione temporanea (⌘S) - DynoTable le impegna come una scrittura rivista invece di un flusso di aggiornamenti di singoli elementi sovrapposti. Apri gli elementi contesi con ⌘K e controlla lo stato attivo prima di riprovare.

Dimensiona il traffico transazionale con il calcolatore dei prezzi. Cambia profilo con ⌘P; Verifica connessione in Impostazioni → Profili. Consulta Connetti a AWS e Installa.

Fonti

FAQ

Come posso correggere TransactionConflittiException in DynamoDB? Riprovare la richiesta con backoff e jitter esponenziali: il conflitto è transitorio con un'altra transazione in corso sullo stesso articolo. Inoltre, mantieni le transazioni piccole, partiziona gli elementi più importanti ed evita di eseguire contemporaneamente una transazione e una semplice scrittura sullo stesso elemento.

TransactionConflictException è uguale a TransactionCanceledException? No. TransactionConflictException significa che un'altra transazione è attualmente in corso sull'articolo. TransactionCanceledException significa che è stato eseguito il rollback di un'intera transazione; i relativi motivi di cancellazione spiegano il motivo e un conflitto di transazione può essere uno di questi motivi.

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.