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 callBatchGetItem 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
- Potong kunci ke dalam kelompok ≤100 dan kirim satu
BatchGetItemper potongan. - 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. - Jaga tanggapan di bawah 16 MB — dengan item besar, minta kurang dari 100 per panggilan.
- 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.
- 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 400Panggilan 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
- BatchGetItem — Referensi Amazon DynamoDB API (diverifikasi 13-07-2026)
- Kuota di Amazon DynamoDB (diverifikasi 13-07-2026)
Kesalahan terkait
- Terlalu banyak item yang diminta untuk panggilan BatchWriteItem — batas di sisi tulis (25 item).
- Daftar kunci item yang diberikan berisi duplikat — kunci yang sama dua kali dalam satu BatchGetItem.
- ProvisionedThroughputExceededException — pembatasan yang muncul sebagai UnprocessedKeys.
- Contoh kode: BatchGetItem di Node.js · di Python (boto3) — pembacaan terpotong dengan percobaan ulang UnprocessedKeys.
- Pelajari: Operasi batch DynamoDB
Referensi
- BatchGetItem — Referensi Amazon DynamoDB API
- BatchWriteItem — Referensi Amazon DynamoDB API
- Penanganan kesalahan dengan DynamoDB — Panduan Pengembang Amazon DynamoDB
- Kuota di Amazon DynamoDB — Panduan Pengembang Amazon DynamoDB
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.