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 itemDynamoDB, ç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 birTransactWriteItemsile örtüşür. - Bir öğeyi paylaşan iki işlem — iki
TransactWriteItemsisteği aynı anahtarı aynı anda içerir; biri kazanır, diğeri birTransactionConflictneden koduyla iptal edilir (TransactionCanceledExceptionolarak 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
- Ü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.
- İşlemleri küçük ve kısa tutun —
TransactWriteItemsbaşına daha az öğe, daha kısa tutmalar ve daha az örtüşme demektir. - 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. - 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.
- Çekişmenin yükselip yükselmediğini ve nerede olduğunu görmek için
TransactionConflictCloudWatch 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
- Amazon DynamoDB Transactions: How it works (2026-07-13 tarihinde doğrulandı)
- PutItem — Amazon DynamoDB API Reference (2026-07-13 tarihinde doğrulandı)
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
- TransactionCanceledException — tüm bir işlem geri alındı (koşullar, kapasite ya da bir çakışma).
- ConditionalCheckFailedException — tek bir yazmanın koşulu başarısız oldu.
- Kod örneği: TransactWriteItems in Node.js — uyarlanacak yeniden deneme/geri çekilmeli bir işlem.
- Öğrenin: DynamoDB transactions · Atomic counters
Kaynaklar
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- PutItem — Amazon DynamoDB API Reference
- TransactWriteItems — Amazon DynamoDB API Reference
- DynamoDB metrics and dimensions — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.