DynamoDB TransactionConflictException

TL;DR — Başka bir işlem, isteğinizle aynı öğe üzerinde zaten çalışıyor, bu yüzden DynamoDB izolasyonu korumak için sizinkini reddetti. Bu, verinizde bir hata değil, geçici çekişmedir — üstel geri çekilmeyle yeniden deneyin, işlemleri küçük tutun ve aynı sıcak öğeye eşzamanlı yazmaları azaltın.

Ne anlama gelir

TransactionConflictException: Transaction is ongoing for the item

DynamoDB, çakışan yazmaları süren işlemlere karşı sıralı yürütür. Düz bir PutItem, UpdateItem ya da DeleteItem, aynı öğeyi içeren süren bir TransactWriteItems ile çakıştığında bu istisnaya çarparsınız. Bloklamak yerine, DynamoDB tek öğe yazmasını TransactionConflictException (HTTP 400) ile reddeder. Yeniden denenebilirdir — diğer işlem işlendiğinde ya da iptal edildiğinde çakışma temizlenir.

TransactionCanceledException'dan ayrımına dikkat edin: kaybeden istek kendisi bir TransactWriteItems ya da TransactGetItems olduğunda, DynamoDB bunun yerine tüm o işlemi iptal eder — bu istisnayı değil, CancellationReasons'ı öğe başına neden kodu olarak TransactionConflict taşıyan bir iptal alırsınız.

Neden olur

  • Aynı öğeye eşzamanlı yazmalar — düz bir PutItem/UpdateItem, o öğeye dokunan süren bir TransactWriteItems ile örtüşür.
  • Bir öğeyi paylaşan iki işlem — iki TransactWriteItems isteği aynı anahtarı aynı anda içerir; biri kazanır, diğeri bir TransactionConflict neden koduyla iptal edilir (TransactionCanceledException olarak belirir).
  • Yoğun eşzamanlı güncellemeler altında sıcak bir öğe — örneğin paylaşılan bir sayaç ya da her isteğin güncellediği tek bir toplam satırı.
  • Diğer yazıcılarla örtüşecek kadar uzun öğeleri tutan uzun ya da büyük işlemler.
  • Bir yeniden deneme fırtınası — geri çekilme olmadan yapılan yeniden denemeler, aynı çekişmeli öğeye daha fazla eşzamanlı deneme yığar.

Nasıl düzeltilir

  1. Üstel geri çekilme + titreşimle yeniden deneyin. Bu birincil çözümdür — çakışma geçicidir ve diğer işlem yerleştiğinde temizlenir. Yeniden denemeler başka bir çakışmaya yeniden senkronize olmasın diye titreşimi koruyun.
  2. İşlemleri küçük ve kısa tutunTransactWriteItems başına daha az öğe, daha kısa tutmalar ve daha az örtüşme demektir.
  3. Sıcak öğelerdeki çekişmeyi azaltın — sıcak bir sayacı birden çok öğeye parçalayın ve toplayın ya da ya hep ya hiç semantiğine ihtiyacınız olmadığında bir işlem yerine düz bir UpdateItem (ADD) ile bir atomik sayaç kullanın.
  4. Kaçınabiliyorsanız aynı öğede bir işlemi ve düz bir yazmayı eşzamanlı karıştırmayın — her ikisini de aynı yoldan yönlendirin.
  5. Çekişmenin yükselip yükselmediğini ve nerede olduğunu görmek için TransactionConflict CloudWatch metriğini izleyin.

Eşzamanlı yazan sizseniz — uygulamanız aynı tabloya yazarken öğeleri elle düzenliyorsanız — DynoTable'ın hazırlama alanı, elle yaptığınız düzenlemeleri örtüşen tekil yazmalar akışı yerine, tek seferde gözden geçirip commit ettiğiniz tek bir işlemsel yazmada toplar.

DynoTable'da inceleyin

Eşzamanlı yazar sen olduğunuzda, aşamalandırma yoluyla toplu manuel düzenlemeler (⌘S) — DynoTable bunları örtüşen tek öğeli güncelleme akışı yerine gözden geçirilmiş tek bir yazma olarak kaydeder. Tartışmalı öğeleri ⌘K ile açın ve yeniden denemeden önce canlı durumu inceleyin.

İşlem trafiğini pricing calculator ile boyutlandırın. Profilleri ⌘P ile değiştirin; Ayarlar → Profiller'de Bağlantıyı Test Et. Bkz. Connect to AWS ve Install.

Kaynaklar

SSS

DynamoDB'de TransactionConflictException'ı nasıl düzeltirim? İsteği üstel geri çekilme ve titreşimle yeniden deneyin — çakışma, aynı öğe üzerinde başka bir süren işlemle geçici çekişmedir. Ayrıca işlemleri küçük tutun, sıcak öğeleri parçalayın ve aynı öğeye karşı bir işlemi ve düz bir yazmayı eşzamanlı çalıştırmaktan kaçının.

TransactionConflictException, TransactionCanceledException ile aynı mıdır? Hayır. TransactionConflictException, başka bir işlemin şu anda öğe üzerinde çalıştığı anlamına gelir. TransactionCanceledException, tüm bir işlemin geri alındığı anlamına gelir; CancellationReasons'ı nedenini açıklar ve bir işlem çakışması o nedenlerden biri olabilir.

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.