DynamoDB on-demand throughput exceeded
TL;DR — はい、オンデマンドテーブルでもスロットリングは発生します。3つの原因: 最大スループット(MaxReadRequestUnits/MaxWriteRequestUnits)を設定してそれを超えた、30 分以内に以前のトラフィックピークの2倍を超えて 駆動した、または テーブルレベルのクォータ(テーブルあたりデフォルトで 40,000 読み取りリクエストユニットと 40,000 書き込みリクエストユニット)に達したのです。最大値を引き上げるか削除し、トラフィックを段階的に増やし、指数バックオフのリトライを維持してください。
意味
ThrottlingException: Rate of requests exceeds the allowed throughput.オンデマンドモードはトラフィックに合わせてスケールしますが、即座にではなく、上限がないわけでもありません。新しいオンデマンドテーブルは即座に毎秒最大 4,000 書き込みと 12,000 読み取りを維持し、オンデマンドは 以前のトラフィックピークの2倍まで 即座に対応します。設定した最大値を超える、30 分以内にその倍増を追い越す、またはクォータを越えると、すべてスロットリングとして現れます。ThrottlingException は HTTP 400 でリトライ可能で、エラーは達した制限とリソースを指定する ThrottlingReason フィールド(例: IndexWriteMaxOnDemandThroughputExceeded)を運びます。
発生する理由
- 設定された最大スループット —
MaxReadRequestUnits/MaxWriteRequestUnitsを設定し、需要がそれを超えた。DynamoDB はThrottlingExceptionを返します(あなたが選んだコスト管理の上限で、ベストエフォートで適用されます)。 - 以前のピークの2倍より速い — オンデマンドは以前のピークの2倍まで即座に対応しますが、30 分以内にその2倍を超えるとスロットリングが発生することがあります。
- コールドスタートの増加 — 真新しいテーブル(または作成直後の一括ロード)が、毎秒 4,000 書き込みと 12,000 読み取りの初期ベースラインを超える。
- テーブルレベルのクォータ — テーブルあたりデフォルトの上限である 40,000 読み取りリクエストユニットと 40,000 書き込みリクエストユニット。アカウントレベルのクォータ違反は代わりに
RequestLimitExceededとして現れます。 - ホットパーティション — テーブルモードに関わらず独自のパーティションごとの制限を持つ1つのパーティションキーにトラフィックが集中している。
修正方法
- 設定された最大値を引き上げます —
UpdateTableでMaxReadRequestUnits/MaxWriteRequestUnitsを増やすか、値を-1に設定してカスタム上限を削除します(サービスクォータは依然適用されます)。 - 既知のスパイクの前にプレウォームします — DynamoDB のウォームスループット設定を使うか、トラフィックの増加を少なくとも 30 分にわたって間隔をあけ、オンデマンドの倍増が段差の変化を追うのではなく需要の先を行くようにします。
- 指数バックオフのリトライを維持します — SDK はデフォルトでスロットルを再試行します。バースト的な負荷にはアダプティブリトライモードを使います。
- 一括インポートをスロットルする か、真新しいテーブルを叩く代わりに S3 インポート機能を使います。
- キースペースを分散し、単一のパーティションキーがホットにならないようにします。ホットパーティションは、テーブルに余裕があってもスロットリングします。
- テーブルで 40,000 読み取り/書き込みリクエストユニットより多くを正当に必要とする場合は クォータの引き上げを要求します。
どのキーがリクエストを吸収しているか追っていますか?DynoTable デスクトップアプリ でテーブルを閲覧・フィルタし、スループットが上限に達する前にホットパーティションキーを見つけましょう。
よくある質問
DynamoDB のオンデマンドテーブルはスロットリングされることがありますか? はい。オンデマンドテーブルは、設定された最大スループットを超えたとき、DynamoDB がスケールを完了する前に以前のトラフィックピークの2倍を超えて駆動したとき、テーブルあたりデフォルトの 40,000 読み取りと 40,000 書き込みリクエストユニットのクォータを越えたとき、またはホットパーティションキーにトラフィックを集中させたときにスロットリングされます。
オンデマンドスループットの制限を引き上げるには?
UpdateTable で MaxReadRequestUnits/MaxWriteRequestUnits を増やすか、値を -1 に設定してカスタム上限を削除します。アカウントのクォータは依然適用されます。テーブルあたりデフォルトの 40,000 リクエストユニットより多く必要な場合は、クォータの引き上げを要求します。
関連するエラー
- ProvisionedThroughputExceededException — プロビジョンドモードの同等物。
- ThrottlingException — コントロールプレーン / アカウントのレート制限。
- 学習: オンデマンドとプロビジョンド · ホットパーティション
参考資料
- DynamoDB on-demand capacity mode — Amazon DynamoDB Developer Guide
- DynamoDB maximum throughput for on-demand tables — Amazon DynamoDB Developer Guide
- OnDemandThroughput — Amazon DynamoDB API Reference
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Troubleshooting throttling in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。