DynamoDB ItemCollectionSizeLimitExceededException
TL;DR — 只有帶本地次要索引(LSI)的表才有這個限制:所有共享一個分割區索引鍵的項目("項目集合")合計最多 10 GB。你的某個分割區索引鍵越過了它。重新設計使得沒有單個分割區索引鍵積累無界的資料——或者去掉 LSI。
這是什麼意思
ItemCollectionSizeLimitExceededException: Collection size exceeded.一個項目集合是每個具有相同分割區索引鍵值的項目——在基礎表_以及_它所有的 LSI 中。沒有 LSI 的表沒有逐集合的大小上限(一張表的總大小不受約束)。帶 LSI 的表把每個集合上限設為 10 GB,而這個錯誤意味著一次寫入會把某個集合推過它。這個限制不適用於全域次要索引。
它以 HTTP 400 返回,AWS 把它列為可以重試——但重試只有在集合縮回 10 GB 以下後才會成功。讀取,以及縮減集合大小的寫入(刪除、移除或修剪屬性)仍然被允許,因此你可以挖出一條出路。
為什麼會發生
- 一個熱點/無界的分割區索引鍵——一個鍵(一個大租戶、一個熱門使用者)積累的項目遠多於其他鍵。
- 一個你也許不需要的 LSI——10 GB 上限_只_因為表有一個 LSI 才存在。
- 單個分割區索引鍵下隨時間的僅追加增長。
如何修正
- 重新分片分割區索引鍵。 把過大的實體跨多個分割區索引鍵拆分(例如
TENANT#42#1、TENANT#42#2),使得沒有單個集合無界地增長。 - 用 GSI 替換 LSI。 GSI 有它們自己的分割區索引鍵且沒有項目集合大小限制——對大多數訪問模式而言,GSI 反正是更好的選擇(而且可以在表建立後新增/移除,不像 LSI)。
- 把冷項目歸檔出熱集合(到另一張表或 S3)。
在 DynoTable 中定位
在集合達到 10 GB 之前查詢哪些分割區索引鍵包含最多的項目 — 使用 ⌘K 開啟表,按分割區索引鍵排序,並掃描具有異常長項目列表的鍵。當你計劃重新分片時,item size calculator 有助於估算每個項目的增長。使用 pricing calculator 將 LSI 寫入放大與 GSI 替代方案進行比較。使用 ⌘P 切換設定檔案;在“設定”→“設定檔案”下配置它們。參見連線 AWS和安裝。
來源
- Local secondary indexes(2026-07-13 驗證)
- Error handling with DynamoDB(2026-07-13 驗證)
相關錯誤
- Item size has exceeded the maximum allowed size——每個項目 400 KB 的上限。
- ProvisionedThroughputExceededException
- 學習:GSI vs LSI · Item collections
參考資料
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Local secondary indexes — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。