DynamoDB LimitExceededException
TL;DR — Du hast zu viele Control-Plane-Operationen auf einmal ausgelöst (oder ein Tabellen-/Kontolimit erreicht). Über dein ganzes Konto hinweg dürfen höchstens 500 Tabellen und Indizes gleichzeitig im Status CREATING/UPDATING/DELETING sein. Serialisiere deine Tabellenoperationen, warte auf ACTIVE und wiederhole mit Backoff.
Was es bedeutet
LimitExceededException: Too many operations for a given subscriber.Das ist ein Control-Plane-Fehler — er kommt von CreateTable, UpdateTable, DeleteTable, Index-Erstellung, Restores und ähnlichen Aufrufen, nicht von GetItem/PutItem/Query. DynamoDB sagt dir, dass du ein Nebenläufigkeits- oder Kontolimit überschritten hast. Es ist ein HTTP 400, und AWS listet es als wiederholbar — die Bedingung klärt sich, sobald in Bearbeitung befindliche Operationen abgeschlossen sind.
Warum es passiert
- Zu viele gleichzeitige Tabellen-/Index-Operationen — die kumulierte Anzahl an Tabellen und Indizes im Status
CREATING,DELETINGoderUPDATINGdarf 500 pro Konto/Region nicht überschreiten. (Bis zu 500 gleichzeitige Tabellenoperationen sind pro Konto erlaubt —CreateTable,UpdateTable,DeleteTable,UpdateTimeToLive,RestoreTableFromBackup,RestoreTableToPointInTime— und nur bis zu 250 gleichzeitige Anfragen beim Erstellen von Tabellen mit Sekundärindizes.) - Bulk-Stack-Deploys — CloudFormation/CDK/Terraform, die viele Tabellen (oder viele GSIs) gleichzeitig erstellen oder abbauen, überziehen das Nebenläufigkeitsbudget.
- Konto-Ressourcenkontingente — das Erreichen des Soft-Kontingents von 2.500 Tabellen pro Konto/Region oder das Limit von 50 gleichzeitigen Import-Jobs.
- DynamoDB-Streams-Fehlnutzung —
GetRecordsmit einemLimitgrößer als 1000 aufrufen oder mehr als 2 Prozesse, die gleichzeitig aus demselben Streams-Shard lesen. - Hinweis: ein zweites
UpdateTable, das ausgelöst wird, während dieselbe Tabelle nochUPDATINGist, erscheint als ResourceInUseException, nicht als dieser Fehler — aber beide bedeuten „warte zuerst aufACTIVE".
So behebst du es
- Serialisiere Control-Plane-Operationen — warte, bis eine Tabelle (und jeder GSI)
ACTIVEist, bevor du die nächste Änderung daran auslöst. PollDescribeTableund prüfe aufTableStatus === 'ACTIVE'. - Wiederhole mit exponentiellem Backoff — das Limit ist vorübergehend; ein Retry mit Backoff geht meist durch, sobald die laufenden Operationen abgearbeitet sind.
- Drossle Bulk-Deploys — teile einen großen Stack auf, damit nicht Hunderte Tabellen/GSIs auf einmal entstehen, oder ergänze eine explizite
DependsOn-Reihenfolge, damit sie nicht alle gleichzeitig starten. - Prüfe deine Service-Quotas — wenn du nahe am Tabellenlimit pro Konto bist, beantrage eine Kontingenterhöhung in Service Quotas, statt endlos zu wiederholen.
- Füge GSIs einzeln hinzu — pro
UpdateTable-Operation kannst du nur einen Global Secondary Index anlegen oder löschen; serialisiere Index-Änderungen und warte jeden Backfill ab.
FAQ
Wie behebe ich LimitExceededException in DynamoDB? Höre auf, Control-Plane-Operationen (CreateTable/UpdateTable/DeleteTable/Index-Änderungen) parallel auszulösen. Warte, bis jede Tabelle und jeder Index ACTIVE erreicht, bevor die nächste Änderung kommt, halte die Anzahl der Tabellen in CREATING/UPDATING/DELETING unter der Kontoobergrenze, und wiederhole mit exponentiellem Backoff.
Ist LimitExceededException ein Throttling-Fehler? Es ist ein Control-Plane-Nebenläufigkeits-/Limit-Fehler, kein Data-Plane-Throttling. Data-Plane-Throttling erscheint stattdessen als ProvisionedThroughputExceededException, ThrottlingException oder RequestLimitExceeded.
DynoTable auf Local zeigen lassen
DynoTable ist ein Data-Plane-Client — GetItem, Query und Scan verbrauchen
nichts vom Control-Plane-Nebenläufigkeitsbudget, das dieser Fehler schützt. Wenn
ein Deploy-Skript beim Anlegen von Tabellen auf LimitExceededException läuft,
kannst du mit DynoTable die bereits ACTIVE gewordenen Tabellen durchsehen und
das Schema über die Tabelleneinstellungen prüfen, während deine IaC weiter wiederholt. Für
lokale Stacks startest du DynamoDB Local mit -sharedDb und verbindest dich über
ein Local-Profil (DynamoDB Local betreiben), sodass du
Teil-Deploys inspizieren kannst, ohne auf jeden GSI in AWS zu warten. Der
Single-Table-Design-Planer hilft beim
Skizzieren von Tabellenformen, bevor du in einem ausgelasteten Konto das nächste
CreateTable abschickst.
Verwandte Fehler
- ResourceInUseException — eine Operation auf einer Tabelle, die bereits geändert wird oder bereits existiert.
- ThrottlingException — Data-/Control-Plane-Ratenbegrenzung.
- RequestLimitExceeded — Kontoanfrage-Ratenlimit.
- Learn: DynamoDB-Migrationen
Quellen
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide (verified 2026-07-13)
- UpdateTable — Amazon DynamoDB API Reference (verified 2026-07-13)
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide (verified 2026-07-13)