Terlalu banyak item yang diminta untuk panggilan BatchGetItem — "Too Many Items"

TL;DR — BatchGetItem mengambil paling banyak 100 item per panggilan (dan ≤16 MB data). Anda meminta lebih dari 100 kunci, jadi DynamoDB menolak permintaan tersebut. Bagi kunci Anda menjadi beberapa bagian yang berisi 100 atau kurang dan terbitkan satu BatchGetItem per bagian.

Apa artinya

ValidationException: 1 validation error detected: Value at 'RequestItems.<table-name>.member.Keys' failed to satisfy constraint: Member must have length less than or equal to 100

# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchGetItem call

BatchGetItem mengambil item berdasarkan kunci utama di satu atau beberapa tabel, namun satu panggilan dibatasi pada 100 kunci dan 16 MB data yang dikembalikan. Permintaan lebih dari 100 dan DynamoDB menolak seluruh panggilan. Bahkan dalam batas tersebut, respons mungkin menghasilkan lebih sedikit item daripada yang diminta (batas 16 MB), melaporkan sisanya dalam UnprocessedKeys. Kasus melebihi batas adalah HTTP 400 ValidationException, tidak dapat dicoba ulang hingga ukurannya diubah.

Mengapa itu terjadi

  • Meminta kumpulan kunci besar dalam satu panggilan — meneruskan ratusan kunci langsung ke BatchGetItem.
  • Bagian terikat di atas 100 — mengelompokkan berdasarkan hitungan tetapi salah menggunakan saudara dari batas BatchWrite 25 item, atau satu per satu membiarkan 101 lewat.
  • Menghitung tabel, bukan kunci — batas 100 adalah total kunci di semua tabel dalam permintaan.
  • Tidak melakukan paging UnprocessedKeys — dengan asumsi satu panggilan mengembalikan semuanya, jadi Anda tidak pernah melakukan pemotongan.

Bagaimana cara memperbaikinya

  1. Potong kunci ke dalam kelompok ≤100 dan kirim satu BatchGetItem per potongan.
  2. Tangani UnprocessedKeys — coba lagi kunci apa pun yang dikembalikan dengan backoff eksponensial; ini terjadi bahkan di dalam kumpulan 100 kunci yang valid ketika batas 16 MB tercapai.
  3. Jaga tanggapan di bawah 16 MB — dengan item besar, minta kurang dari 100 per panggilan.
  4. Ketahui apa yang SDK lakukan untuk Anda — klien tingkat rendah dan klien dokumen JavaScript tidak membagi daftar kunci yang terlalu besar; Anda harus membaginya menjadi 100 sendiri. Beberapa klien tingkat yang lebih tinggi (Klien yang Ditingkatkan dari Java SDK dan DynamoDBMapper v1) setidaknya mencoba ulang item yang belum diproses secara otomatis.
  5. Hapus duplikat kunci sebelum dilakukan pemotongan. Kunci duplikat dalam satu kelompok gagal secara terpisah — hapus duplikat terlebih dahulu, lalu potong.

Cara mereproduksinya

Sebuah BatchGetItem yang meminta 101 kunci, satu di atas batas:

const Keys = Array.from({length: 101}, (_, i) => ({pk: {S: `K#${i}`}, sk: {S: 'META'}}));
await client.send(new BatchGetItemCommand({RequestItems: {orders: {Keys}}}));

Keluaran nyata:

ValidationException: Too many items requested for the BatchGetItem call
HTTP 400

Panggilan ini gagal cepat pada bentuk permintaannya — tidak ada pembacaan sebagian yang terjadi, dan tidak ada yang mendarat di UnprocessedKeys. Itulah bedanya antara melampaui batas 100 kunci dan melampaui batas respons 16 MB, yang justru mengembalikan hasil sebagian.

Dari DynoTable

Baca dalam batch kurang dari 100 kunci sekaligus di DynoTable selama Anda melakukan debug — buka tabel dengan ⌘K, filter ke kumpulan kunci Anda, dan pastikan itemnya memang ada sebelum Anda merangkai BatchGetItem yang terpotong-potong dalam kode. Kalkulator ukuran item membantu memilih ukuran potongan yang aman ketika itemnya besar.

Gunakan Query Builder untuk membuat prototipe pembacaan kunci tunggal terlebih dahulu. Ganti profil dengan ⌘P; Uji Koneksi pada Pengaturan → Profil. Lihat Menghubungkan ke AWS dan Instal.

Sumber

Kesalahan terkait

Referensi

Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.

Direproduksi 2026-07-26 terhadap DynamoDB Local 2.x dengan AWS SDK for JavaScript v3.1095.0 — keluaran di atas sama persis.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.