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 才存在。
  • 单个分区键下随时间的仅追加增长

如何修复

  1. 重新分片分区键。 把过大的实体跨多个分区键拆分(例如 TENANT#42#1TENANT#42#2),使得没有单个集合无界地增长。
  2. 用 GSI 替换 LSI。 GSI 有它们自己的分区键且没有项目集合大小限制——对大多数访问模式而言,GSI 反正是更好的选择(而且可以在表创建后添加/移除,不像 LSI)。
  3. 把冷项目归档出热集合(到另一张表或 S3)。

在 DynoTable 中定位

在集合达到 10 GB 之前查找哪些分区键包含最多的项目 — 使用 ⌘K 打开表,按分区键排序,并扫描具有异常长项目列表的键。当你计划重新分片时,item size calculator 有助于估算每个项目的增长。使用 pricing calculator 将 LSI 写入放大与 GSI 替代方案进行比较。使用 ⌘P 切换配置文件;在“设置”→“配置文件”下配置它们。参见连接 AWS安装

来源

相关错误

参考资料

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。