DynamoDB dibatasi pada partisi yang panas meskipun kapasitasnya
TL;DR — Tabel Anda memiliki banyak RCU/WCU yang tidak terpakai secara keseluruhan, namun Anda masih dibatasi karena satu kunci partisi sedang panas. Setiap partisi fisik dirancang untuk menghasilkan maksimum 3.000 unit baca dan 1.000 unit tulis per detik, berapa pun kapasitas yang dimiliki tabel. Lalu lintas yang bertumpuk pada satu kunci membuang satu partisi itu. Sebarkan permintaan ke kunci partisi yang lebih berbeda (write-sharding) untuk memperbaikinya.
Apa artinya
ProvisionedThroughputExceededException: You exceeded your maximum allowed
provisioned throughput for a table or for one or more global secondary indexes.
# ...yet CloudWatch shows consumed capacity well below provisioned.Mengapa itu terjadi
- Kunci partisi berkardinalitas rendah — tanda status, boolean, "tanggal sekarang", atau penyewa tunggal yang menerima lalu lintas terbanyak.
- Item viral / selebriti — satu kunci partisi populer (produk yang sedang tren, pengguna populer) menarik beban yang tidak proporsional.
- Rangkaian waktu dengan kunci "hari ini" — setiap penulisan dilakukan pada kunci partisi berbasis tanggal yang sama.
- Kunci berurutan atau monotonik jadi tulis cluster di partisi terbaru.
- GSI dengan kunci partisi berkardinalitas rendah, yang membatasi penulisan tabel dasar.
Bagaimana cara memperbaikinya
- Meningkatkan kardinalitas kunci. Rancang kunci partisi sehingga permintaan tersebar ke banyak nilai — ini adalah satu-satunya perbaikan yang paling efektif.
- Tulis pecahan hot key. Tambahkan akhiran (
USER#42#1…USER#42#N) sehingga satu entitas logis mencakup beberapa partisi; menyebarkan bacaan di seluruh pecahan. - Tambahkan keacakan atau sufiks terhitung ke kunci rangkaian waktu sehingga penulisan "hari ini" tidak semuanya bertabrakan.
- Cache hot read (DAX atau cache aplikasi) untuk menghilangkan tekanan baca dari partisi hot.
- Pertahankan percobaan ulang eksponensial-backoff — kesalahan ini dapat dicoba ulang dan SDK dinonaktifkan secara default.
- Memperbaiki tombol GSI berkardinalitas rendah — GSI yang di-throttle akan melakukan throttle pada tabel dasar.
- Periksa kesalahan
ThrottlingReason. Ini menyebutkan apakah batasnya spesifik untuk seluruh tabel atau rentang kunci.
Cek ukuran di DynoTable
Temukan kunci partisi panas — buka tabel dengan ⌘K, urutkan berdasarkan kunci partisi, dan cari satu kunci yang membawa lebih banyak item daripada tetangganya. Filter ke kunci itu dan periksa pola penulisan sebelum Anda melakukan pecahan ulang.
Buat model akhiran pecahan tulis di Pembuat Kueri dan perkirakan lalu lintas percobaan ulang dengan kalkulator harga. Ganti profil dengan ⌘P; lihat Menghubungkan ke AWS dan Instal.
Sumber
- Praktik terbaik untuk mendesain kunci partisi (diverifikasi 13-07-2026)
- Memecahkan masalah pembatasan di Amazon DynamoDB (diverifikasi 13-07-2026)
FAQ
Mengapa DynamoDB membatasi saya ketika tabel memiliki kapasitas cadangan? Karena satu kunci partisi itu panas. Setiap partisi fisik memiliki batas maksimum sekitar 3.000 unit baca dan 1.000 unit tulis per detik berapa pun kapasitas tingkat tabelnya, sehingga lalu lintas yang bertumpuk pada satu kunci akan menghabiskan satu partisi tersebut, sementara metrik seluruh tabel terlihat kurang dimanfaatkan.
Bagaimana cara memperbaiki partisi panas di DynamoDB? Tingkatkan kardinalitas kunci partisi sehingga permintaan tersebar di banyak nilai, tuliskan hot key dengan suffix, tambahkan suffix terhitung ke time-series key, dan cache hot reads. Percobaan ulang secara eksponensial membantu mengatasi lonjakan pendek namun tidak memperbaiki kunci yang tidak seimbang.
Kesalahan terkait
- ProvisionedThroughputExceededException — kesalahan pembatasan umum dan perbaikan kapasitas.
- ThrottlingException — batas kecepatan akun/control-plane.
- Pelajari: Partisi panas · Cara kerja kunci partisi
Referensi
Memecahkan masalah pembatasan di Amazon DynamoDB — Panduan Pengembang Amazon DynamoDB
Penanganan kesalahan dengan DynamoDB — Panduan Pengembang Amazon DynamoDB
Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.