DynamoDB limitato su una partizione calda nonostante la capacità
TL;DR — La tua tabella ha molti RCU/WCU inutilizzati nel complesso, ma sei ancora limitato perché una singola chiave di partizione è calda. Ogni partizione fisica è progettata per fornire un massimo di 3.000 unità di lettura e 1.000 unità di scrittura al secondo, indipendentemente dalla capacità della tabella. Il traffico accumulato su una chiave esaurisce quella partizione. Distribuisci le richieste su chiavi di partizione più distinte (write-sharding) per risolvere il problema.
Cosa significa
ProvisionedThroughputExceededException: You exceeded your maximum allowed
provisioned throughput for a table or for one or more global secondary indexes.
# ...yet CloudWatch shows consumed capacity well below provisioned.DynamoDB distribuisce una tabella su molte partizioni fisiche e la capacità della tabella viene divisa tra queste. Una singola partizione è progettata per fornire al massimo 3.000 unità di lettura e 1.000 unità di scrittura al secondo, in entrambe le modalità di capacità. Se il tuo modello di accesso concentra il traffico su una chiave di partizione, la partizione di quella chiave raggiunge il proprio limite massimo e viene limitato, anche se i parametri a livello di tabella sembrano sottoutilizzati (i campi "ThrottlingReason" dell'errore, ad esempio "TableReadKeyRangeThroughputExceeded", denominano il limite esatto che è stato raggiunto). La capacità adattiva aiuta, ma non può salvare una chiave veramente sbilanciata.
Perché succede
- Chiave di partizione a bassa cardinalità: un flag di stato, un valore booleano, una "data corrente" o un singolo tenant che riceve la maggior parte del traffico.
- Un elemento virale/celebrità: una chiave di partizione popolare (un prodotto di tendenza, un utente popolare) assorbe un carico sproporzionato.
- Serie temporali con una chiave "oggi": ogni scrittura avviene sulla stessa chiave di partizione basata sulla data.
- Una chiave sequenziale o monotonica quindi scrive il cluster sulla partizione più recente.
- A GSI con una chiave di partizione a bassa cardinalità, che limita le scritture della tabella base.
Come risolverlo
- Aumentare la cardinalità della chiave. Progetta la chiave di partizione in modo che le richieste siano distribuite su più valori: questa è la soluzione più efficace.
- Scrivi il tasto di scelta rapida. Aggiungi un suffisso (
USER#42#1…USER#42#N) in modo che un'entità logica si estenda su più partizioni; l'uscita a ventaglio legge attraverso i frammenti. - Aggiungi casualità o un suffisso calcolato alle chiavi delle serie temporali in modo che le scritture "di oggi" non entrino tutte in collisione.
- Memorizza nella cache le letture a caldo (DAX o cache dell'applicazione) per ridurre la pressione di lettura sulla partizione a caldo.
- Conserva tentativi di backoff esponenziale: è possibile riprovare questo errore e l'SDK esegue il backoff per impostazione predefinita.
- Correggi i tasti GSI a bassa cardinalità — un GSI limitato limita la tabella di base.
- Controlla "ThrottlingReason" nell'errore. Indica se il limite era specifico per l'intera tabella o per l'intervallo di chiavi.
Controlla la dimensione in DynoTable
Trova la chiave di partizione attiva: apri la tabella con ⌘K, ordina per chiave di partizione e cerca una chiave che trasporta molti più oggetti rispetto ai vicini. Filtra in base a quella chiave e controlla i modelli di scrittura prima di eseguire nuovamente lo sharding.
Modella i suffissi write-shard nel Query Builder e stima il traffico dei nuovi tentativi con il calcolatore dei prezzi. Cambia profilo con ⌘P; vedere Connetti a AWS e Installa.
Fonti
- Best practice per la progettazione delle chiavi di partizione (verificato il 13-07-2026)
- Risoluzione dei problemi di limitazione in Amazon DynamoDB (verificato il 13-07-2026)
FAQ
Perché DynamoDB mi limita quando la tabella ha capacità libera? Perché una singola chiave di partizione è attiva. Ogni partizione fisica ha un limite massimo di circa 3.000 unità di lettura e 1.000 unità di scrittura al secondo indipendentemente dalla capacità a livello di tabella, quindi il traffico accumulato su una chiave esaurisce quella partizione mentre i parametri a livello di tabella sembrano sottoutilizzati.
Come posso riparare una partizione attiva in DynamoDB? Aumenta la cardinalità della chiave di partizione in modo che le richieste si diffondano su più valori, scrivi il tasto di scelta rapida con un suffisso, aggiungi un suffisso calcolato alle chiavi della serie temporale e memorizza nella cache le letture attive. I tentativi di backoff esponenziale aiutano a superare i picchi brevi ma non risolvono una chiave sbilanciata.
Errori correlati
- ProvisionedThroughputExceededException: l'errore generale di limitazione e le correzioni relative alla capacità.
- ThrottlingException: limiti di velocità dell'account/piano di controllo.
- Impara: Partizioni attive · Come funzionano le chiavi di partizione
Riferimenti
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale AWS collegata sopra.