Too many actions in a TransactWriteItems call
TL;DR — Bir DynamoDB işlemi 100 eylemle sınırlıdır. TransactWriteItems (ve TransactGetItems), 100'den fazla Put/Update/Delete/ConditionCheck eylemi olan bir isteği reddeder. İşi birden çok işleme bölün — ya da ya hep ya hiç atomikliğine ihtiyacınız yoksa, bunun yerine BatchWriteItem (çağrı başına 25) kullanın.
Ne anlama gelir
ValidationException: 1 validation error detected: Value '<your request>' at 'transactItems' failed to satisfy constraint: Member must have length less than or equal to 100Hizmet, <your request> yerine serileştirilmiş isteğinizin tamamını geri yansıtır — 101 eylemli bir işlem için bu yaklaşık 65.000 karakterdir. Asıl bulgu son cümledir.
TransactWriteItems, hepsi birlikte işlenen ya da hepsi birlikte geri alınan eylemleri gruplar, ancak tek bir işlem en fazla 100 eylem tutabilir ve işlemdeki öğelerin toplam boyutu 4 MB'yi aşamaz. Daha fazlasını iletin ve DynamoDB yürütmeden önce tüm çağrıyı reddeder. Mesaj genellikle TransactItems liste uzunluğunda bir kısıtlama olarak okunur. Bu, işlem daha küçük olana kadar istemci tarafında, yeniden denenebilir olmayan bir HTTP 400 ValidationException'dır.
Neden olur
- Çok fazla yazmayı atomik olarak toplu işlemek — bir işlemde 150 put'u işlemeye çalışmak.
- Tek bir
TransactItemslistesine sınırsız eylem ekleyen bir döngü. - 100'ü aşan fan-out — 100'den fazla öğeye dokunan ve tek bir işlem olarak modellenen bir mantıksal işlem.
- Yalnızca yazmaları saymak —
ConditionCheckeylemlerinin de 100'e doğru saydığını unutmayın.
Nasıl düzeltilir
- Her biri ≤100 eylem olan birden çok işleme bölün — her işlemin bağımsız olarak atomik olduğunu unutmayın (birlikte geri alınmazlar).
- Hiç bir işleme ihtiyacınız olup olmadığını yeniden değerlendirin — yazmalar ya hep ya hiç semantiği gerektirmiyorsa,
BatchWriteItem(çağrı başına ≤25) daha ucuzdur ve verim açısından daha dostudur. - Eylem sayısını azaltın — bir öğeye yapılan birden çok değişikliği birleşik bir
UpdateExpressioniçeren tek birUpdate'e katın. - Toplamı, tek bir mantıksal değişiklik daha az öğeye dokunacak şekilde farklı modelleyin.
Nasıl yeniden oluşturulur
Sınırın bir üstü olan 101 eylemli bir işlem. Ret, işleme özgü bir hata değil, dizi uzunluğuna dair düz bir ValidationException'dır:
const actions = Array.from({length: 101}, (_, i) => ({
Put: {TableName: 'orders', Item: {pk: {S: `T#${i}`}, sk: {S: 'META'}}}
}));
await client.send(new TransactWriteItemsCommand({TransactItems: actions}));Gerçek çıktı:
ValidationException: Member must have length less than or equal to 100
HTTP 400İfadeye dikkat edin: DynamoDB bunu TransactItems dizisi üzerindeki bir uzunluk sınırı olarak reddeder; yani aldığınız dize işlemlerden hiç söz etmez. Yalnızca mesajı aratmak sizi bariz biçimde buraya getirmez.
DynoTable workbench
Atomik olarak 100'den fazla yazma işlemi gerçekleştirmeden önce, DynoTable'deki hedef öğeleri inceleyin; ⌘K ile tabloyu açın ve her anahtarın mevcut olduğunu onaylayın. Aşamalandırma (⌘S) önce daha küçük bir işlemi test etmenize olanak tanır.
Expression Builder'de çok öğeli güncellemeler oluşturun ve bir tuştaki yinelenen eylemleri tek bir Update'ye katlayın. Profilleri ⌘P ile değiştirin; bkz. Connect to AWS ve Install.
Kaynaklar
- TransactWriteItems — Amazon DynamoDB API Reference (2026-07-13 tarihinde doğrulandı)
- Amazon DynamoDB Transactions: How it works (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Transaction request cannot include multiple operations on one item — bir işlemde iki kez hedeflenen aynı öğe.
- TransactionCanceledException — işleme sırasında iptal edilen geçerli bir işlem.
- Too many items requested for the BatchWriteItem call — işlemsel olmayan toplu istek sınırı (25).
- Kod örneği: TransactWriteItems in Node.js — başlanacak doğru boyutlu bir işlem.
- Öğrenin: DynamoDB transactions · Batch operations
Kaynaklar
- TransactWriteItems — Amazon DynamoDB API Reference
- TransactGetItems — Amazon DynamoDB API Reference
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- BatchWriteItem — Amazon DynamoDB API Reference
- Service, account, and table quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.
2026-07-26 tarihinde AWS SDK for JavaScript v3.1095.0 ile DynamoDB Local 2.x'e karşı yeniden üretildi — yukarıdaki çıktı birebir alınmıştır.