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

  1. Meningkatkan kardinalitas kunci. Rancang kunci partisi sehingga permintaan tersebar ke banyak nilai — ini adalah satu-satunya perbaikan yang paling efektif.
  2. Tulis pecahan hot key. Tambahkan akhiran (USER#42#1USER#42#N) sehingga satu entitas logis mencakup beberapa partisi; menyebarkan bacaan di seluruh pecahan.
  3. Tambahkan keacakan atau sufiks terhitung ke kunci rangkaian waktu sehingga penulisan "hari ini" tidak semuanya bertabrakan.
  4. Cache hot read (DAX atau cache aplikasi) untuk menghilangkan tekanan baca dari partisi hot.
  5. Pertahankan percobaan ulang eksponensial-backoff — kesalahan ini dapat dicoba ulang dan SDK dinonaktifkan secara default.
  6. Memperbaiki tombol GSI berkardinalitas rendahGSI yang di-throttle akan melakukan throttle pada tabel dasar.
  7. 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

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

Referensi

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

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.