DynamoDB LimitExceededException

TL;DR: hai eseguito troppe operazioni sul piano di controllo contemporaneamente (o hai raggiunto un limite di tabella/account). Fino a 500 tabelle e indici possono trovarsi nello stato "CREAZIONE"/"AGGIORNAMENTO"/"ELIMINAZIONE" alla volta nel tuo account. Serializza le operazioni della tabella, attendi "ACTIVE" e riprova con il backoff.

Cosa significa

LimitExceededException: Too many operations for a given subscriber.

Questo è un errore del piano di controllo: proviene da CreateTable, UpdateTable, DeleteTable, creazione dell'indice, ripristini e chiamate simili, non da GetItem/PutItem/Query. DynamoDB ti indica che hai superato un limite di concorrenza o di account. È un HTTP 400 e AWS lo elenca come OK per riprovare: la condizione viene cancellata al termine delle operazioni in volo.

Perché succede

  • Troppe operazioni simultanee su tabelle/indici: il numero cumulativo di tabelle e indici nello stato "CREAZIONE", "ELIMINAZIONE" o "AGGIORNAMENTO" non può superare 500 per account/regione. (Sono consentite fino a 500 operazioni simultanee sulle tabelle per account — CreateTable, UpdateTable, DeleteTable, UpdateTimeToLive, RestoreTableFromBackup, RestoreTableToPointInTime — e solo fino a 250 richieste simultanee quando si creano tabelle con indici secondari.)
  • Distribuzioni di stack in blocco: la creazione o l'eliminazione di molte tabelle (o molti GSI) da parte di CloudFormation/CDK/Terraform supera contemporaneamente il budget di concorrenza.
  • Quote delle risorse dell'account: raggiungimento della quota flessibile di 2.500 tabelle per account/regione o del limite di 50 processi di importazione simultanea.
  • DynamoDB Uso improprio degli stream: chiamata a GetRecords con un Limit maggiore di 1000 o più di 2 processi che leggono contemporaneamente dallo stesso shard di stream.
  • Nota: un secondo UpdateTable emesso mentre la stessa tabella è ancora in AGGIORNAMENTO viene visualizzato come ResourceInUseException, non questo errore, ma entrambi significano "attendi prima ACTIVE".

Come risolverlo

  1. Serializza le operazioni del piano di controllo: attendi che una tabella (e ciascuna GSI) diventi "ATTIVA" prima di apportare la modifica successiva. Effettua il sondaggio su "DescribeTable" e seleziona "TableStatus === 'ACTIVE'".
  2. Riprova con backoff esponenziale: il limite è transitorio; un tentativo annullato di solito ha successo una volta che le operazioni in volo si esauriscono.
  3. Limita le distribuzioni in blocco: dividi uno stack di grandi dimensioni in modo da non creare centinaia di tabelle/GSI contemporaneamente oppure aggiungi un ordine esplicito DependsOn in modo che non si attivino tutti insieme.
  4. Controlla le tue quote di servizio: se sei vicino al limite di tabelle per account, richiedi un aumento della quota in Quote di servizio anziché riprovare all'infinito.
  5. Aggiungi GSI uno alla volta: puoi creare o eliminare un solo indice secondario globale per operazione "UpdateTable", quindi serializza le modifiche dell'indice e attendi ogni recupero.

FAQ

Come posso correggere l'eccezione LimitExceededException in DynamoDB? Interrompere l'emissione di operazioni sul piano di controllo (CreateTable/UpdateTable/DeleteTable/modifiche dell'indice) in parallelo. Attendi che ogni tabella e indice raggiungano ATTIVO prima della modifica successiva, mantieni il conteggio delle tabelle in CREAZIONE/AGGIORNAMENTO/ELIMINAZIONE sotto il limite dell'account e riprova con il backoff esponenziale.

LimitExceededException è un errore di limitazione? Si tratta di un errore di concorrenza/limite del piano di controllo, non di una limitazione del piano dati. La limitazione del piano dati viene invece visualizzata come ProvisionedThroughputExceededException, ThrottlingException o RequestLimitExceeded.

Punta DynoTable a Local

DynoTable è un client del piano dati: GetItem, Query e Scan non consumano il budget di concorrenza del piano di controllo protetto da questo errore. Se uno script di distribuzione ha successo LimitExceededException durante la creazione delle tabelle, utilizza DynoTable per sfogliare le tabelle che ha già raggiunto "ACTIVE" e convalida lo schema da Impostazioni tabella while i tuoi tentativi IaC. Per gli stack locali, esegui DynamoDB Local con -sharedDb e connettersi tramite un profilo locale (Running DynamoDB Local) quindi puoi ispezionare le distribuzioni parziali senza aspettare che ogni GSI finisca in AWS. Il pianificatore di progettazione a tabella singola aiuta a disegnare forme di tabella prima di attivare un'altra "CreateTable" in un account occupato.

Errori correlati

Fonti

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.