DynamoDB ThrottlingException
TL;DR — Your request rate exceeded a limit. It's retryable — back off and retry (the SDK does this by default). If it persists, you're calling a control-plane API (CreateTable, UpdateTable, DescribeTable) too often, or hitting an account-level limit.
What it means
ThrottlingException: Rate of requests exceeds the allowed throughput.ThrottlingException (and the related RequestLimitExceeded) signals a rate limit that isn't your table's per-partition capacity. It's most common on control-plane operations, which have low, account-wide limits, and on very high-volume data-plane bursts.
Why it happens
- Polling control-plane APIs — calling
DescribeTable,ListTables,UpdateTablein a tight loop (e.g. waiting for a table to becomeACTIVE). - Creating/deleting many tables quickly — there's a limit on concurrent table operations.
- Account-level request-rate limits exceeded across all tables.
- A sudden burst beyond what the service will absorb even in on-demand mode (on-demand has an initial throughput ceiling that scales up over time).
How to fix it
- Retry with exponential backoff + jitter — the AWS SDKs do this automatically; keep retries enabled and consider adaptive retry mode.
- Stop tight-polling control-plane APIs. Use waiters (
waitUntilTableExists) which poll on a sensible schedule instead of a hot loop. - Batch and pace data-plane writes. Ramp bulk loads gradually so on-demand capacity can scale with you.
- Spread table operations over time rather than creating dozens at once.
Example
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {waitUntilTableExists} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({});
// a waiter polls on a backoff schedule — not a tight DescribeTable loop
await waitUntilTableExists({client, maxWaitTime: 120}, {TableName: 'Orders'});Related errors
- ProvisionedThroughputExceededException — per-table capacity throttle.
- ResourceInUseException — table busy / already exists.
- Learn: On-demand vs provisioned