DynamoDB RequestLimitExceeded
TL;DR — テーブル自身のプロビジョンドキャパシティではなく、アカウント/テーブルレベルのリクエストレートのクォータ を超えました。オンデマンドテーブルはデフォルトで毎秒 40,000 読み取りリクエストユニットと 40,000 書き込みリクエストユニットです。SDK のバックオフのリトライを維持し、トラフィックが本物なら Service Quotas でクォータを引き上げ、単一のテーブル/パーティションがボトルネックにならないよう負荷を分散してください。
意味
RequestLimitExceeded: Throughput exceeds the current throughput limit for your
account. To request a limit increase, contact AWS Support.RequestLimitExceeded は、DynamoDB がデータプレーンで返す3つのスロットリング例外の1つです(ProvisionedThroughputExceededException と ThrottlingException と並んで)。これは、テーブルごとのプロビジョンド RCU/WCU の上限ではなく、アカウントレベルのサービスクォータ — オンデマンドテーブルのテーブルごとのスループットクォータなど — に達したことを示します。HTTP 400 を返し、リトライ可能 です。SDK は自動的にバックオフして再試行します。エラーは ThrottlingReason フィールド(例: TableWriteAccountLimitExceeded または IndexReadAccountLimitExceeded)と、影響を受けたリソースの ARN を運びます。
発生する理由
- オンデマンドテーブルのデフォルト上限 — 各オンデマンドテーブル(とその各 GSI)は、毎秒 40,000 読み取りリクエストユニットと 40,000 書き込みリクエストユニットという調整可能なデフォルトクォータを持ちます。それを超える持続的な消費は、クォータが引き上げられるまでアカウントレベルの
ThrottlingReasonでスロットリングします。 - テーブルがアカウントのクォータの下でこれ以上スケールできない — AWS ドキュメントによると、オンデマンドリクエストのレートが許可されたアカウントのスループットを超え「テーブルをこれ以上スケールできない」。これらのクォータは最後の砦の保護策で、引き上げられます。
- 新しくオンデマンドになったテーブルのウォームアップ — 真新しいオンデマンドテーブル(またはオンデマンドに切り替えたばかりのもの)は、以前のピークの2倍まで即座に提供します。それを超えるはるかに大きなスパイクは、スケールする前にスロットリングすることがあります。
- 最近のピークをはるかに超えるトラフィックスパイクを吸収する 単一のホットテーブル。
修正方法
- 指数バックオフのリトライをオンにしておきます — SDK のデフォルトが一時的なスパイクを処理します。バースト的なワークロードにはアダプティブリトライモードを使います。リトライを無効にしないでください。
- クォータを引き上げます — トラフィックが正当で持続的なら、Service Quotas でテーブルごとのオンデマンドスループット(またはアカウントのテーブル数/スループットのクォータ)の引き上げを要求します。
- 既知のスパイクの前にプレウォームします — いきなりピークに飛ぶのではなくトラフィックを増加させ、オンデマンドのスケーリングが需要の先を行くようにします。
- 負荷を分散します — ホットキーをシャーディングし、書き込みを分散して、1つのテーブル/パーティションがスパイク全体を運ばないようにします(ホットパーティションのパターン)。
- ホットな読み取りをキャッシュ(DAX やアプリキャッシュ)し、読み取り圧力を上限より下に逃がします。
よくある質問
RequestLimitExceeded は ProvisionedThroughputExceededException とどう違いますか? ProvisionedThroughputExceededException は、プロビジョンドキャパシティのテーブルが自身の設定した RCU/WCU を超えたことを意味します。RequestLimitExceeded は、単一テーブルのテーブルごとの設定に関わらず、アカウントまたはテーブルレベルのリクエストレートのクォータ — 多くはオンデマンドのデフォルトである毎秒 40,000 読み取りと 40,000 書き込みリクエストユニット — に達したことを意味します。
RequestLimitExceeded はリトライ可能ですか? はい。これはスロットリングエラーで、AWS SDK は指数バックオフで自動的に再試行します。恒常的な発生は、リトライを増やすのではなく、クォータの引き上げや負荷の分散が必要なことを意味します。
関連するエラー
- ProvisionedThroughputExceededException — テーブルごとのプロビジョンドキャパシティを超えた。
- ThrottlingException — コントロールプレーン / 一般的なレート制限。
- 学習: オンデマンドとプロビジョンド · ホットパーティション
参考資料
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Troubleshooting throttling in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB on-demand capacity mode — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。