DynamoDB ThrottlingException
TL;DR — リクエストレートが制限を超えました。リトライ可能です。バックオフして再試行します(SDK はデフォルトでこれを行います)。続く場合は、コントロールプレーン API(CreateTable、UpdateTable、DescribeTable)を頻繁に呼びすぎているか、アカウントレベルの制限に達しています。
意味
ThrottlingException: Rate of requests exceeds the allowed throughput.ThrottlingException(と関連する RequestLimitExceeded)は、プロビジョンドテーブル自身の RCU/WCU 設定ではない レート制限 を示します。HTTP 400 で返り、リトライ可能 です。頻繁に実行される コントロールプレーン 操作で最も一般的で、オンデマンド テーブルでは、リクエストレートが高すぎるときに任意のデータプレーン操作で返されることがあります(設定された最大オンデマンドスループットを超えたときを含む)。エラーは、スロットリングされたリソースと達した制限を指定する ThrottlingReason フィールドを運びます。
発生する理由
- コントロールプレーン API のポーリング —
DescribeTable、ListTables、UpdateTableをタイトなループで呼ぶ(例: テーブルがACTIVEになるのを待つ)。 - 多数のテーブルの すばやい作成/削除 — 同時実行のコントロールプレーン操作は制限されています(
CREATING/UPDATING/DELETINGのテーブル/インデックスは一度に 500 以下)。 - 設定されたオンデマンド最大スループット — オンデマンドテーブルや GSI で
MaxReadRequestUnits/MaxWriteRequestUnitsを超えるとThrottlingExceptionが返ります。 - オンデマンドテーブルでの突然のバースト — 新しいテーブルは毎秒 4,000 書き込みと 12,000 読み取りで始まり、30 分以内に以前のピークの2倍を超えると、DynamoDB がスケールするまでスロットリングすることがあります。
修正方法
- 指数バックオフ + ジッターで再試行します — AWS SDK は自動的にこれを行います。リトライを有効にしておき、アダプティブリトライモードを検討します。
- コントロールプレーン API のタイトポーリングをやめます。 ホットループの代わりに、まともなスケジュールでポーリングするウェイター(
waitUntilTableExists)を使います。 - データプレーンの書き込みをバッチ化してペース調整します。 一括ロードを段階的に増やし、オンデマンドキャパシティが一緒にスケールできるようにします。
- 一度に数十を作成するのではなく、テーブル操作を時間をかけて分散させます。
例
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'});よくある質問
コントロールプレーンのスロットリングでテーブルのセットアップが止まっているときは、DescribeTable をループでポーリングする代わりに DynoTable で既存のテーブルを閲覧しましょう — 1 回更新すれば、⌘K でテーブルを開けます。オンデマンドのスロットリングを引き起こす一括ロードでは、負荷を上げる前に料金計算ツールでトラフィックを見積もってください。
プロファイルの切り替えは ⌘P です。Settings → Profiles の Test Connection がアカウントを確認してくれます。AWS に接続するとインストールを参照してください。
DynoTable でサイズを確認する
ThrottlingException は ProvisionedThroughputExceededException と同じですか?
いいえ。ProvisionedThroughputExceededException は、テーブルのプロビジョンドキャパシティを超えたときのデータプレーンエラーです。ThrottlingException は、アカウント全体で低い制限を持つコントロールプレーン操作(CreateTable、UpdateTable、DescribeTable)と、非常に大量のバーストで最も一般的です。
DynamoDB の ThrottlingException を修正するには?
指数バックオフとジッターで再試行します — AWS SDK は自動的にこれを行います。コントロールプレーン API のタイトポーリングをやめ(waitUntilTableExists のようなウェイターを使う)、一括ロードを段階的に増やしてオンデマンドキャパシティが一緒にスケールできるようにし、テーブル操作を時間をかけて分散させます。
出典
- Error handling with DynamoDB — ThrottlingException (2026-07-13 時点で検証)
- Troubleshooting throttling in Amazon DynamoDB (2026-07-13 時点で検証)
関連するエラー
- ProvisionedThroughputExceededException — テーブルごとのキャパシティスロットル。
- RequestLimitExceeded — アカウントのリクエストレートクォータ。
- On-demand throughput exceeded — オンデマンドテーブルでもスロットリングは発生する。
- ResourceInUseException — テーブルがビジー / すでに存在する。
- 学習: オンデマンドとプロビジョンド
参考資料
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Troubleshooting throttling in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB on-demand capacity mode — Amazon DynamoDB Developer Guide
- DynamoDB maximum throughput for on-demand tables — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。