DynamoDB TransactionConflictException

TL;DR — Transaksi lain sudah beroperasi pada item yang sama dengan permintaan Anda, jadi DynamoDB menolak transaksi Anda untuk menjaga isolasi. Ini hanya perselisihan sementara, bukan bug pada data Anda — coba lagi dengan backoff eksponensial, jaga agar transaksi tetap kecil, dan kurangi penulisan bersamaan ke item populer yang sama.

Apa artinya

TransactionConflictException: Transaction is ongoing for the item

Perhatikan perbedaan dari TransactionCanceledException: ketika permintaan yang kalah itu sendiri adalah TransactWriteItems atau TransactGetItems, DynamoDB akan membatalkan seluruh transaksi tersebut — Anda mendapatkan cancellation yang CancellationReasonsnya membawa TransactionConflict sebagai kode alasan per item, bukan pengecualian ini.

Mengapa itu terjadi

  • Penulisan serentak ke item yang samaPutItem/UpdateItem biasa tumpang tindih dengan TransactWriteItems dalam penerbangan yang menyentuh item tersebut.
  • Dua transaksi berbagi item — dua permintaan TransactWriteItems menyertakan kunci yang sama pada waktu yang sama; satu menang, yang lain dibatalkan dengan kode alasan TransactionConflict (muncul sebagai TransactionCanceledException).
  • Item populer dalam pembaruan berat secara bersamaan — mis. penghitung bersama atau satu baris agregat setiap permintaan diperbarui.
  • Transaksi panjang atau besar menyimpan item cukup lama untuk tumpang tindih dengan penulis lain.
  • A retry storm — percobaan ulang tanpa backoff menumpuk lebih banyak percobaan secara bersamaan ke item yang diperebutkan sama.

Bagaimana cara memperbaikinya

  1. Coba lagi dengan backoff eksponensial + jitter. Ini adalah perbaikan utama — konflik bersifat sementara dan hilang ketika transaksi lainnya diselesaikan. Pertahankan jitter agar percobaan ulang tidak disinkronkan ulang menjadi tabrakan lainnya.
  2. Jaga transaksi tetap kecil dan singkat — lebih sedikit item per TransactWriteItems berarti penangguhan lebih pendek dan lebih sedikit tumpang tindih.
  3. Kurangi pertentangan pada item populer — pecahkan penghitung panas ke beberapa item dan agregat, atau gunakan penghitung atom dengan UpdateItem (ADD) biasa alih-alih transaksi saat Anda tidak memerlukan semantik semua atau tidak sama sekali.
  4. Jangan mencampur transaksi dan penulisan biasa pada item yang sama secara bersamaan jika Anda dapat menghindarinya — rutekan keduanya melalui jalur yang sama.
  5. Pantau metrik TransactionConflict CloudWatch untuk melihat apakah pertentangan meningkat dan di mana.

Periksa di DynoTable

Jika penulis bersamaan adalah Anda, pengeditan manual batch melalui staging (⌘S) — DynoTable mengkomitnya sebagai satu penulisan yang ditinjau, bukan aliran pembaruan satu item yang tumpang tindih. Buka item yang diperebutkan dengan ⌘K dan periksa status aktif sebelum mencoba lagi.

Ukur lalu lintas transaksional dengan kalkulator harga. Ganti profil dengan ⌘P; Uji Koneksi pada Pengaturan → Profil. Lihat Menghubungkan ke AWS dan Instal.

Sumber

FAQ

Bagaimana cara memperbaiki TransactionConflictException di DynamoDB? Coba lagi permintaan dengan backoff dan jitter eksponensial — konfliknya adalah perselisihan sementara dengan transaksi dalam penerbangan lainnya pada item yang sama. Jaga juga agar transaksi tetap kecil, pecahkan item-item panas, dan hindari menjalankan transaksi dan penulisan biasa terhadap item yang sama secara bersamaan.

Apakah TransactionConflictException sama dengan TransactionCanceledException? Tidak. TransactionConflictException berarti transaksi lain sedang berjalan pada item tersebut. TransactionCanceledException berarti seluruh transaksi dibatalkan; Alasan Pembatalannya menjelaskan alasannya, dan konflik transaksi dapat menjadi salah satu alasannya.

Kesalahan terkait

Referensi

Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.