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 官方文档。