DynamoDB LimitExceededException

TL;DR — 你一次發起了過多的控制平面操作(或觸及了一個表/帳戶限制)。你帳戶中同時處於 CREATING/UPDATING/DELETING 狀態的表和索引最多可有 500 個。序列化你的表操作,等待 ACTIVE,然後用退避重試。

這是什麼意思

LimitExceededException: Too many operations for a given subscriber.

這是一個控制平面錯誤——它來自 CreateTableUpdateTableDeleteTable、索引建立、恢復及類似呼叫,而不是來自 GetItem/PutItem/Query。DynamoDB 在告訴你,你已經超過了一個並行或帳戶限制。它是一個 HTTP 400,AWS 把它列為可以重試——隨著進行中的操作完成,這個狀況會消除。

為什麼會發生

  • 並行的表/索引操作過多——處於 CREATINGDELETINGUPDATING 狀態的表和索引的累計數量不能超過每帳戶/區域 500 個。(每個帳戶最多允許 500 個同時進行的表操作——CreateTableUpdateTableDeleteTableUpdateTimeToLiveRestoreTableFromBackupRestoreTableToPointInTime——而建立帶次要索引的表時最多隻允許 250 個並行請求。)
  • 批次棧部署——CloudFormation/CDK/Terraform 同時建立或拆除許多表(或許多 GSI)會超出並行預算。
  • 帳戶資源配額——觸及每帳戶/區域 2,500 張表的軟配額,或 50 個同時匯入作業的限制。
  • DynamoDB Streams 誤用——用大於 1000 的 Limit 呼叫 GetRecords,或超過 2 個程序同時從同一個 streams 分片讀取。
  • 注意: 在同一張表仍處於 UPDATING 時發起的第二個 UpdateTable 會表現為 ResourceInUseException,而不是這個錯誤——但兩者都意味著"先等待 ACTIVE"。

如何修正

  1. 序列化控制平面操作——在對一張表(及每個 GSI)發起下一個變更之前,等它變為 ACTIVE。輪詢 DescribeTable 並在 TableStatus === 'ACTIVE' 上設關卡。
  2. 用指數退避重試——這個限制是瞬時的;隨著進行中的操作排空,一次退避重試通常會成功。
  3. 限制批次部署的節奏——拆分一個大棧,使你不會一次建立數百個表/GSI,或者新增顯式的 DependsOn 排序,讓它們不會同時觸發。
  4. 檢查你的服務配額——如果你接近每帳戶表數限制,就在 Service Quotas 中請求配額提升,而不是無限重試。
  5. 逐個新增 GSI——每個 UpdateTable 操作只能建立或刪除一個全域次要索引,因此序列化索引變更並等待每次回填。

常見問題

如何修復 DynamoDB 中的 LimitExceededException? 停止並行發出控制平面操作(CreateTable/UpdateTable/DeleteTable/索引更改)。等待每個表和索引在下一次更改之前達到 ACTIVE,將 CREATING/UPDATING/DELETING 中的表計數保持在帳戶上限以下,然後使用指數退避重試。

LimitExceededException 是節流錯誤嗎? 這是控制平面並行/限制錯誤,而不是資料平面限制。資料平面限制表面為 ProvisionedThroughputExceededException、ThrottingException 或 RequestLimitExceeded。

將 DynoTable 指向 Local

DynoTable 是資料平面用戶端 — GetItemQueryScan 不消耗此錯誤保護的控制平面並行預算。如果部署指令碼命中 LimitExceededException 建立表格時,使用DynoTable 瀏覽表格已經達到 ACTIVE 並從 表格設定 驗證模式,同時你的 IaC 重試。對於本地堆疊,執行 DynamoDB Local 和 -sharedDb 並透過本地設定檔案 (Running DynamoDB Local) 連線,以便你可以檢查部分部署,而無需等待每個 GSI 在 AWS 中完成。 single-table design planner有助於素描在你在繁忙的帳戶中解僱另一個 CreateTable 之前,請先調整表格形狀。

相關錯誤

來源

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。