Provisioned throughput decreases are limited within a given day
In breve — DynamoDB limita quanto spesso puoi ridurre la capacità di lettura/scrittura con provisioning di una tabella (o GSI) in un singolo giorno UTC. Hai usato l'assegnazione, quindi UpdateTable viene rifiutato. Attendi la ricarica oraria, raggruppa la tua riduzione in meno passaggi più grandi, o passa la tabella a on-demand e smetti del tutto di gestire le riduzioni.
Cosa significa
LimitExceededException: Subscriber limit exceeded: Provisioned throughput
decreases are limited within a given UTC dayOgni tabella inizia un giorno UTC con un piccolo budget di riduzioni di capacità (gli aumenti possono essere fatti tutte le volte necessarie, soggetti alle quote dell'account e al fatto che DynamoDB non ti lascia aumentare troppo rapidamente). Inizi la giornata con 4 riduzioni disponibili, e ne guadagni 1 in più ogni ora fino a un massimo di 4 disponibili in qualsiasi momento — abbastanza per fino a 27 riduzioni nell'arco di un giorno completo di 24 ore. Esauriscilo e ulteriori chiamate di riduzione UpdateTable falliscono con una LimitExceededException (HTTP 400; il messaggio generico della developer guide per questa eccezione è "Too many operations for a given subscriber.") finché il budget non si ricarica. È una quota, quindi riprovare alla cieca non aiuta all'interno della stessa finestra.
Perché succede
- Flapping dell'auto-scaling — un carico a raffica fa sì che l'auto-scaling di DynamoDB riduca ripetutamente la capacità, bruciando il budget di riduzioni.
- Uno script che abbassa la capacità troppo spesso — molte piccole riduzioni invece di una più grande.
- Tuning manuale durante i test di carico — abbassare ripetutamente la capacità man mano che il traffico cala.
- Budget per-indice — i limiti di riduzione di tabella e GSI sono disaccoppiati, quindi ogni GSI ha la propria assegnazione; una tabella con diversi indici può raggiungerlo su uno di essi. Una singola richiesta
UpdateTableche riduce sia la tabella sia un GSI viene rifiutata per intero se uno dei due supera il suo limite attuale.
Come risolverlo
- Attendi la ricarica. Una riduzione diventa disponibile ogni ora (fino a 4 disponibili in qualsiasi momento); un nuovo budget di 4 riduzioni inizia ogni giorno UTC.
- Fai meno riduzioni, più grandi. Scendi da 1000 → 200 in un passaggio invece di cinque passaggi da 160 unità.
- Regola l'auto-scaling — alza l'utilizzo target e aggiungi un cooldown di scale-in così smetta di ridurre in modo così aggressivo.
- Passa a on-demand se il carico è a raffica o imprevedibile:On-demand rimuove del tutto la gestione manuale della capacità (e la sua quota di riduzioni).
aws dynamodb update-table --table-name <Table> \ --billing-mode PAY_PER_REQUEST
Errori correlati
- ProvisionedThroughputExceededException — il throttle runtime quando le letture/scritture superano la capacità con provisioning.
- LimitExceededException — la più ampia famiglia di quote del control-plane account/tabella.
- Impara: On-demand vs provisioned
Riferimenti
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- UpdateTable — Amazon DynamoDB API Reference
- DynamoDB on-demand capacity mode — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.