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 を持つ からこそ 存在します。
  • 時間とともに単一のパーティションキー配下での 追記専用の成長

修正方法

  1. パーティションキーを再シャーディングします。 大きすぎるエンティティを複数のパーティションキーに分割し(例: TENANT#42#1TENANT#42#2)、単一のコレクションが無制限に成長しないようにします。
  2. LSI を GSI に置き換えます。 GSI は独自のパーティションキーを持ち、アイテムコレクションのサイズ制限が ありません。ほとんどのアクセスパターンでは、いずれにせよ GSI の方が良い選択です(LSI と異なり、テーブル作成後に追加/削除できます)。
  3. ホットコレクションから コールドなアイテムをアーカイブします(別のテーブルや S3 へ)。

DynoTable で見つける

コレクションが 10 GB に達する前に、どのパーティションキーが最も多くのアイテムを抱えているかを見つけましょう — ⌘K でテーブルを開き、パーティションキーで並べ替え、異常に長いアイテム列を持つキーを探します。再シャーディングを計画するときは、アイテムサイズ計算ツールがアイテムごとの増え方の見積もりに役立ちます。

料金計算ツールで、LSI の書き込み増幅と GSI を使う案を比べてみましょう。プロファイルの切り替えは ⌘P、設定は Settings → Profiles で行います。AWS に接続するインストールを参照してください。

出典

関連するエラー

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。