DynamoDB ItemCollectionSizeLimitExceededException
TL;DR — この制限を持つのは ローカルセカンダリインデックス(LSI) を持つテーブルだけです。1つのパーティションキーを共有するすべてのアイテム(「アイテムコレクション」)は合計で最大 10 GB です。パーティションキーの1つがそれを超えました。単一のパーティションキーが無制限のデータを蓄積しないよう再設計するか、LSI を削除してください。
意味
ItemCollectionSizeLimitExceededException: Collection size exceeded.アイテムコレクション は、同じパーティションキー値を持つすべてのアイテムです — ベーステーブル と そのすべての LSI において。LSI を 持たない テーブルにはコレクションごとのサイズ上限がありません(テーブルの全体サイズは制約なし)。LSI を 持つ テーブルは各コレクションを 10 GB に制限し、このエラーは書き込みが1つのコレクションをそれ以上に押し上げることを意味します。この制限はグローバルセカンダリインデックスには適用されません。
これは HTTP 400 で返り、AWS はリトライ可能としてリストしています。ただしリトライはコレクションが 10 GB 未満に縮小してから成功します。読み取り、およびコレクションのサイズを減らす書き込み(削除、属性の除去やトリミング)は依然として許可されるため、脱出できます。
発生する理由
- ホット/無制限のパーティションキー — 1つのキー(大きなテナント、人気ユーザー)が他より遥かに多くのアイテムを蓄積する。
- 必要ないかもしれない LSI — 10 GB の上限は、テーブルが LSI を持つ からこそ 存在します。
- 時間とともに単一のパーティションキー配下での 追記専用の成長。
修正方法
- パーティションキーを再シャーディングします。 大きすぎるエンティティを複数のパーティションキーに分割し(例:
TENANT#42#1、TENANT#42#2)、単一のコレクションが無制限に成長しないようにします。 - LSI を GSI に置き換えます。 GSI は独自のパーティションキーを持ち、アイテムコレクションのサイズ制限が ありません。ほとんどのアクセスパターンでは、いずれにせよ GSI の方が良い選択です(LSI と異なり、テーブル作成後に追加/削除できます)。
- ホットコレクションから コールドなアイテムをアーカイブします(別のテーブルや S3 へ)。
DynoTable で見つける
コレクションが 10 GB に達する前に、どのパーティションキーが最も多くのアイテムを抱えているかを見つけましょう — ⌘K でテーブルを開き、パーティションキーで並べ替え、異常に長いアイテム列を持つキーを探します。再シャーディングを計画するときは、アイテムサイズ計算ツールがアイテムごとの増え方の見積もりに役立ちます。
料金計算ツールで、LSI の書き込み増幅と GSI を使う案を比べてみましょう。プロファイルの切り替えは ⌘P、設定は Settings → Profiles で行います。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 と LSI · アイテムコレクション
参考資料
- 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 ドキュメントに照らして確認しました。