Mengelola pengaturan pada tabel kapasitas yang disediakan DynamoDB - Amazon DynamoDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengelola pengaturan pada tabel kapasitas yang disediakan DynamoDB

Saat Anda membuat tabel baru yang tersedia di Amazon DynamoDB, Anda harus menentukan kapasitas throughput yang tersedia. Ini adalah jumlah aktivitas membaca dan menulis yang dapat didukung oleh tabel. DynamoDB menggunakan informasi ini untuk mencadangkan sumber daya sistem yang memadai guna memenuhi persyaratan throughput Anda.

catatan

Anda dapat membuat tabel mode sesuai permintaan sehingga Anda tidak perlu mengelola pengaturan kapasitas apa pun untuk server, penyimpanan, atau throughput. DynamoDB secara instan mengakomodasi beban kerja Anda saat beban kerja tersebut meningkat atau menurun ke tingkat lalu lintas yang telah dicapai sebelumnya. Jika tingkat lalu lintas beban kerja mencapai puncak baru, DynamoDB beradaptasi dengan cepat untuk mengakomodasi beban kerja. Untuk informasi selengkapnya, lihat Mode sesuai permintaan.

Anda juga dapat mengizinkan penskalaan otomatis DynamoDB untuk mengelola kapasitas throughput tabel Anda. Namun, Anda tetap harus memberikan pengaturan awal kapasitas baca dan tulis saat membuat tabel. Penskalaan otomatis DynamoDB menggunakan pengaturan awal ini sebagai titik awal, dan kemudian menyesuaikannya secara dinamis sebagai respons terhadap kebutuhan aplikasi Anda. Untuk informasi selengkapnya, lihat Mengelola kapasitas throughput secara otomatis dengan penskalaan otomatis DynamoDB.

Saat data aplikasi dan persyaratan akses Anda berubah, Anda mungkin perlu menyesuaikan pengaturan throughput tabel Anda. Jika Anda menggunakan penskalaan otomatis DynamoDB, pengaturan throughput secara otomatis disesuaikan sebagai respons terhadap beban kerja aktual. Anda juga dapat menggunakan operasi UpdateTable untuk menyesuaikan kapasitas throughput tabel Anda secara manual. Anda mungkin memutuskan untuk melakukan ini jika Anda perlu memuat data secara massal dari penyimpanan data yang ada ke tabel DynamoDB baru Anda. Anda dapat membuat tabel dengan pengaturan throughput tulis yang besar, lalu mengurangi pengaturan ini setelah pemuatan data massal selesai.

Anda menentukan persyaratan throughput dalam hal unit kapasitas—jumlah data yang perlu dibaca atau ditulis oleh aplikasi Anda per detik. Anda dapat mengubah pengaturan ini nanti, jika diperlukan, atau mengaktifkan penskalaan otomatis DynamoDB untuk mengubahnya secara otomatis.

Unit kapasitas baca

Unit kapasitas baca mewakili satu bacaan konsisten yang kuat per detik, atau dua bacaan akhir konsisten per detik, untuk sebuah item hingga ukuran 4 KB.

catatan

Untuk mempelajari selengkapnya tentang model konsistensi baca DynamoDB, lihat Konsistensi baca.

Misalnya, Anda membuat tabel dengan 10 unit kapasitas baca yang disediakan. Hal ini memungkinkan Anda melakukan 10 bacaan sangat konsisten per detik, atau 20 pembacaan yang pada akhirnya konsisten per detik, untuk item hingga 4 KB.

Membaca item yang lebih besar dari 4 KB menghabiskan lebih banyak unit kapasitas baca. Misalnya, pembacaan item yang sangat konsisten yaitu 8 KB (4 KB × 2) menggunakan 2 unit kapasitas baca. Pembacaan yang pada akhirnya konsisten pada item yang sama hanya menggunakan 1 unit kapasitas baca.

Ukuran item untuk pembacaan dibulatkan ke kelipatan 4 KB berikutnya. Misalnya, membaca item berukuran 3.500 byte menggunakan throughput yang sama dengan membaca item berukuran 4 KB.

Konsumsi unit kapasitas untuk bacaan

Berikut ini penjelasan bagaimana operasi baca DynamoDB menggunakan unit kapasitas baca:

  • GetItem—Membaca satu item dari tabel. Untuk menentukan jumlah unit kapasitas yang akan dikonsumsi GetItem, ambil ukuran item dan bulatkan hingga ke batas 4 KB berikutnya. Jika Anda menentukan bacaan sangat konsisten, ini adalah jumlah unit kapasitas yang diperlukan. Untuk pembacaan yang konsisten (default), bagi angka ini dengan dua.

    Misalnya, jika Anda membaca item berukuran 3,5 KB, DynamoDB membulatkan ukuran item menjadi 4 KB. Jika Anda membaca item berukuran 10 KB, DynamoDB membulatkan ukuran item menjadi 12 KB.

  • BatchGetItem—Membaca hingga 100 item, dari satu tabel atau lebih. DynamoDB memproses setiap item dalam batch sebagai permintaan GetItem individu, jadi DynamoDB terlebih dahulu mengumpulkan ukuran setiap item ke batas 4 KB berikutnya, lalu menghitung ukuran totalnya. Hasilnya belum tentu sama dengan total ukuran semua item. Misalnya, jika BatchGetItem membaca item sebesar 1,5 KB dan item 6,5 KB, DynamoDB menghitung ukuran sebagai 12 KB (4 KB + 8 KB), bukan 8 KB (1,5 KB + 6,5 KB).

  • Query—Membaca beberapa item yang memiliki nilai kunci partisi yang sama. Semua item yang dikembalikan diperlakukan sebagai operasi baca tunggal, dimana DynamoDB menghitung ukuran total semua item dan kemudian membulatkannya ke batas 4 KB berikutnya. Misalnya, kueri Anda mengembalikan 10 item dengan ukuran gabungan 40,8 KB. DynamoDB membulatkan ukuran item untuk operasi menjadi 44 KB. Jika kueri mengembalikan 1500 item masing-masing 64 byte, ukuran kumulatifnya adalah 96 KB.

  • Scan—Membaca semua item dalam tabel. DynamoDB mempertimbangkan ukuran data yang dievaluasi, bukan ukuran data yang dikembalikan oleh pemindaian.

Jika Anda melakukan operasi baca pada item yang tidak ada, DynamoDB masih menggunakan throughput baca yang disediakan: Permintaan baca yang sangat konsisten menggunakan satu unit kapasitas baca, sedangkan permintaan baca yang pada akhirnya konsisten menggunakan 0,5 unit kapasitas baca.

Untuk setiap operasi yang mengembalikan item, Anda dapat meminta subset atribut untuk diambil. Namun, hal ini tidak berdampak pada penghitungan ukuran item. Selain itu, Query dan Scan dapat mengembalikan jumlah item, bukan nilai atribut. Penghitungan item menggunakan jumlah unit kapasitas baca yang sama dan tunduk pada penghitungan ukuran item yang sama. Hal ini karena DynamoDB harus membaca setiap item untuk menambah jumlah.

Operasi baca dan konsistensi baca

Perhitungan sebelumnya mengasumsikan permintaan baca yang sangat konsisten. Untuk permintaan bacaan akhir konsisten, operasi tersebut hanya menggunakan setengah unit kapasitas. Untuk bacaan akhir konsisten, jika ukuran item total adalah 80 KB, operasi hanya menggunakan 10 unit kapasitas.

Unit kapasitas tulis

Satu unit kapasitas tulis mewakili satu tulis per detik, untuk item hingga ukuran 1 KB.

Misalnya, Anda membuat tabel dengan 10 unit kapasitas tulis. Hal ini memungkinkan Anda melakukan 10 penulisan per detik, untuk item berukuran hingga 1 KB per detik.

Ukuran item untuk penulisan dibulatkan ke kelipatan 1 KB berikutnya. Misalnya, menulis item berukuran 500 byte memerlukan throughput yang sama dengan menulis item berukuran 1 KB.

Konsumsi unit kapasitas untuk penulisan

Berikut ini penjelasan bagaimana operasi tulis DynamoDB menggunakan unit kapasitas tulis:

  • PutItem—Menulis satu item pada tabel. Jika item dengan kunci primer yang sama ada dalam tabel, operasi menggantikan item. Untuk menghitung konsumsi throughput yang disediakan, ukuran item yang penting lebih besar dari dua.

  • UpdateItem—Memodifikasi satu item dalam tabel. DynamoDB menganggap ukuran item, seperti yang muncul sebelum dan setelah pembaruan. Throughput tersedia yang dikonsumsi mencerminkan ukuran item yang lebih besar. Meskipun Anda hanya memperbarui subset dari atribut item, UpdateItem masih akan mengonsumsi jumlah penuh throughput yang disediakan (lebih besar dari ukuran item "sebelum" dan "sesudah").

  • DeleteItem—Menghapus satu item dari tabel. Konsumsi throughput yang disediakan didasarkan pada ukuran item yang dihapus.

  • BatchWriteItem—Menulis hingga 25 item untuk satu atau beberapa tabel. DynamoDB memproses setiap item dalam batch sebagai permintaan PutItem atau DeleteItem individu (pembaruan tidak didukung). Jadi DynamoDB terlebih dahulu membulatkan ukuran setiap item ke batas 1 KB berikutnya, kemudian menghitung ukuran total. Hasilnya belum tentu sama dengan total ukuran semua item. Misalnya, jika BatchWriteItem menulis item sebesar 500 byte dan item 3,5 KB, DynamoDB menghitung ukurannya sebagai 5 KB (1 KB + 4 KB), bukan 4 KB (500 byte + 3,5 KB).

Untuk operasi PutItem, UpdateItem, dan , DynamoDB membulatkan ukuran item hingga 1 KB berikutnya. Misalnya, jika Anda menempatkan atau menghapus item berukuran 1,6 KB, DynamoDB membulatkan ukuran item menjadi 2 KB.

PutItem, UpdateItem, dan DeleteItem memungkinkan penulisan bersyarat, di mana Anda menentukan ekspresi yang harus bernilai true agar operasi berhasil. Jika ekspresi bernilai salah, DynamoDB masih menggunakan unit kapasitas tulis dari tabel. Jumlah yang dikonsumsi bergantung pada ukuran item (apakah item yang sudah ada di tabel atau item baru yang Anda coba buat atau perbarui). Misalnya, jika item yang ada berukuran 300kb dan item baru yang Anda coba buat atau perbarui berukuran 310kb, unit kapasitas tulis yang digunakan akan menjadi item 310kb.

Meminta throttling dan kapasitas lonjakan

Jika aplikasi Anda melakukan operasi baca atau tulis pada laju yang lebih tinggi dari yang bisa didukung tabel, DynamoDB mulai melakukan throttle pada permintaan tersebut. Ketika DynamoDB melakukan throttle operasi baca atau tulis, ia mengembalikan ProvisionedThroughputExceededException ke pemanggil. Aplikasi kemudian dapat mengambil tindakan yang sesuai, seperti menunggu beberapa saat sebelum mencoba kembali permintaan tersebut.

catatan

Kami menyarankan Anda menggunakan AWS SDK untuk pengembangan perangkat lunak. AWS SDK menyediakan dukungan bawaan untuk mencoba kembali permintaan yang di-throttle; Anda tidak perlu menulis logika ini sendiri. Untuk informasi selengkapnya, lihat Percobaan ulang kesalahan dan mundur eksponensial.

Konsol DynamoDB menampilkan metrik CloudWatch Amazon untuk tabel Anda, sehingga Anda dapat memantau permintaan baca dan permintaan tulis yang dibatasi. Jika Anda mengalami throttling berlebihan, Anda harus mempertimbangkan untuk meningkatkan pengaturan throughput yang disediakan pada tabel Anda.

Dalam beberapa kasus, DynamoDB menggunakan kapasitas lonjakan untuk mengakomodasi operasi baca atau tulis lebih dari pengaturan throughput tabel Anda. Dengan kapasitas lonjakan, permintaan baca atau tulis yang tidak terduga dapat berhasil ketika mereka semestinya di-throttle. Untuk informasi selengkapnya, lihat Menggunakan kapasitas lonjakan secara efektif.

Meminta throttling dant kapasitas adaptif

DynamoDB secara otomatis mendistribusikan data Anda di seluruh partisi, yang disimpan di beberapa server di Cloud (Untuk informasi AWS selengkapnya, lihat). Partisi dan distribusi data Tidak selalu mungkin untuk mendistribusikan aktivitas baca dan tulis secara merata sepanjang waktu. Ketika akses data tidak seimbang, partisi "panas" dapat menerima volume lalu lintas baca dan tulis yang lebih tinggi dibandingkan dengan partisi lainnya. Kapasitas adaptif bekerja dengan meningkatkan kapasitas throughput secara otomatis untuk partisi yang menerima lebih banyak lalu lintas. Untuk informasi selengkapnya, lihat Memahami kapasitas adaptif DynamoDB.

Memilih pengaturan throughput awal

Setiap aplikasi memiliki persyaratan yang berbeda untuk membaca dan menulis dari database. Ketika Anda menentukan pengaturan throughput awal untuk tabel DynamoDB, pertimbangkan input berikut:

  • Ukuran item. Beberapa item berukuran cukup kecil sehingga bisa dibaca atau ditulis menggunakan satu unit kapasitas. Item yang lebih besar memerlukan beberapa unit kapasitas. Dengan memperkirakan ukuran item yang akan ada di tabel, Anda dapat menentukan pengaturan yang akurat untuk throughput yang disediakan pada tabel Anda.

  • Perkiraan laju permintaan baca dan tulis. Selain ukuran item, Anda harus memperkirakan jumlah aktivitas baca dan tulis yang perlu Anda lakukan per detik.

  • Persyaratan konsistensi baca. Unit kapasitas baca didasarkan pada operasi baca yang sangat konsisten, yang menggunakan sumber daya database dua kali lebih banyak dibandingkan operasi baca yang konsisten. Anda harus menentukan apakah aplikasi Anda memerlukan bacaan akhir konsisten, atau apakah aplikasi dapat melonggarkan persyaratan ini dan pada akhirnya melakukan bacaan sangat konsisten. (Operasi baca di DynamoDB pada akhirnya konsisten, secara default. Anda dapat meminta bacaan sangat konsisten untuk operasi ini jika diperlukan.)

Misalnya, Anda ingin membaca 80 item per detik dari sebuah tabel. Item berukuran 3 KB, dan Anda ingin bacaan sangat konsisten. Untuk skenario ini, setiap pembacaan memerlukan satu unit kapasitas baca yang disediakan. Untuk menentukan angka ini, Anda membagi ukuran item operasi dengan 4 KB, lalu membulatkannya ke bilangan bulat terdekat, seperti dalam contoh ini:

  • 3 KB / 4 KB = 0,75, atau 1 unit kapasitas baca

Untuk skenario ini, Anda harus mengatur throughput baca yang disediakan tabel menjadi 80 unit kapasitas baca:

  • 1 unit kapasitas baca setiap item × 80 bacaan per detik = 80 unit kapasitas baca

Sekarang anggaplah Anda ingin menulis 100 item per detik ke tabel Anda, dan item tersebut berukuran 512 byte. Untuk skenario ini, setiap penulisan memerlukan satu unit kapasitas tulis yang disediakan. Untuk menentukan angka ini, Anda membagi ukuran item operasi dengan 1 KB, lalu membulatkannya ke bilangan bulat terdekat:

  • 512 byte / 1 KB = 0.5, atau 1

Untuk skenario ini, Anda akan menetapkan throughput penulisan tabel yang disediakan menjadi 100 unit kapasitas tulis:

  • 1 unit kapasitas tulis per item × 100 tulis per detik = 100 unit kapasitas tulis

catatan

Untuk rekomendasi tentang throughput yang disediakan dan topik terkait, lihat Praktik Terbaik untuk merancang dan menggunakan kunci partisi secara efektif.

Memodifikasi pengaturan throughput

Jika Anda telah mengaktifkan penskalaan otomatis DynamoDB untuk sebuah tabel, maka kapasitas throughputnya disesuaikan secara dinamis sebagai respons terhadap penggunaan sebenarnya. Tidak diperlukan intervensi manual.

Anda dapat memodifikasi pengaturan throughput yang disediakan tabel menggunakan AWS Management Console atau operasi. UpdateTable Untuk informasi selengkapnya tentang peningkatan dan penurunan throughput per hari, lihat Layanan, akun, dan tabel kuota di Amazon DynamoDB.

Mengatasi masalah throttling

Untuk pemecahan masalah yang tampaknya terkait dengan pembatasan, hal pertama yang penting adalah mengonfirmasi apakah pembatasan tersebut berasal dari DynamoDB atau dari aplikasi.

Berikut adalah beberapa skenario umum, dan langkah-langkah yang mungkin dilakukan untuk membantu mengatasinya.

Tabel DynamoDB tampaknya memiliki kapasitas yang disediakan cukup, tetapi permintaan dibatasi.

Hal ini dapat terjadi ketika throughput berada di bawah rata-rata per menit, namun throughput melebihi jumlah yang tersedia per detik. DynamoDB hanya melaporkan metrik level menit CloudWatch ke, yang kemudian dihitung sebagai jumlah selama satu menit dan dirata-ratakan. Namun DynamoDB sendiri menerapkan batasan kecepatan per detik. Jadi, jika terlalu banyak throughput yang terjadi dalam sebagian kecil menit tersebut, misalnya beberapa detik atau kurang, maka permintaan untuk sisa menit tersebut dapat dibatasi. Misalnya, jika kita telah menyediakan 60 WCU pada sebuah tabel, tabel tersebut dapat melakukan 3600 penulisan dalam 1 menit. Namun jika seluruh 3600 permintaan WCU tercapai dalam detik yang sama, maka sisa menit tersebut akan di-throttle.

Salah satu cara untuk mengatasi skenario ini adalah dengan menambahkan beberapa kegugupan dan kemunduran eksponensial ke panggilan API. Untuk informasi lebih lanjut lihat posting ini tentang backoff dan jitter.

Penskalaan otomatis diaktifkan, tetapi tabel masih dibatasi.

Hal ini dapat terjadi ketika terjadi lonjakan lalu lintas secara tiba-tiba. Penskalaan otomatis dapat dipicu ketika dua titik data melanggar nilai pemanfaatan target yang dikonfigurasi dalam rentang satu menit. Oleh karena itu, penskalaan otomatis dapat terjadi karena kapasitas yang dikonsumsi berada di atas target pemanfaatan selama dua menit yang konsisten. Tetapi jika lonjakan terpisah lebih dari satu menit, penskalaan otomatis mungkin tidak dipicu. Demikian pula, peristiwa penurunan skala dapat dipicu ketika 15 titik data berturut-turut lebih rendah dari pemanfaatan target. Dalam kedua kasus tersebut, setelah penskalaan otomatis dipicu, UpdateTablepanggilan dipanggil. Kemudian dapat memakan waktu beberapa menit untuk memperbarui kapasitas yang disediakan untuk tabel atau indeks. Selama periode ini, setiap permintaan yang melebihi kapasitas tabel yang disediakan sebelumnya akan dibatasi.

Singkatnya, Penskalaan Otomatis memerlukan titik data berurutan di mana nilai pemanfaatan target dilanggar untuk meningkatkan skala tabel DynamoDB. Karena alasan inilah Penskalaan Otomatis tidak disarankan sebagai solusi untuk menangani beban kerja yang melonjak. Silakan merujuk ke dokumentasi Penskalaan Otomatis untuk informasi selengkapnya.

Tabel berada dalam mode kapasitas "Sesuai Permintaan" tetapi masih dibatasi.

Untuk tabel Sesuai Permintaan, DynamoDB secara otomatis mengalokasikan lebih banyak kapasitas seiring peningkatan volume lalu lintas Anda. Selama akses didistribusikan secara merata ke seluruh partisi, dan tabel tidak melebihi dua kali lipat lalu lintas puncak sebelumnya, keseluruhan tabel tidak akan dibatasi. Namun, pembatasan masih dapat terjadi jika throughput melebihi dua kali lipat puncak sebelumnya dalam waktu 30 menit yang sama. Silakan merujuk ke OnDemand penskalaan untuk informasi lebih lanjut.

Hot key mungkin menyebabkan masalah pelambatan.

Di DynamoDB, kunci partisi yang tidak memiliki kardinalitas tinggi dapat mengakibatkan banyak permintaan yang menargetkan beberapa partisi saja. Jika "partisi panas" yang dihasilkan melampaui batas per partisi sebesar 3000 RCU atau 1000 WCU per detik, hal ini dapat mengakibatkan throttling. Alat diagnostik CloudWatch Contributor Insights, dapat membantu men-debug ini, dengan menyediakan grafik CCI untuk setiap pola akses item tabel. Anda dapat terus memantau kunci tabel DynamoDB yang paling sering diakses dan tren lalu lintas lainnya. Untuk mengetahui lebih lanjut tentang CloudWatch Contributor Insights, lihat CCI. Untuk informasi spesifik tentang memilih hot key yang tepat, lihat Memilih hot key yang tepat.

Menggunakan CloudWatch metrik untuk menyelidiki pelambatan

Di bawah ini adalah beberapa metrik DynamoDB yang harus dipantau selama peristiwa throttling, untuk membantu menemukan operasi mana yang membuat permintaan yang di-throttle dan mengidentifikasi akar masalah.

1. ThrottledRequests

  • Satu permintaan yang di-throttle dapat berisi beberapa peristiwa yang di-throttle, sehingga peristiwa dapat lebih relevan untuk diperiksa.

    Misalnya, saat Anda memperbarui item dalam tabel dengan GSI, akan terjadi beberapa peristiwa - penulisan ke tabel, dan penulisan ke setiap indeks. Bahkan jika satu atau lebih dari peristiwa ini dibatasi, hanya akan ada satu. ThrottledRequest

2. ReadThrottleEvents

  • Perhatikan permintaan yang melebihi RCU yang disediakan untuk tabel atau GSI.

3. WriteThrottleEvents

  • Perhatikan permintaan yang melebihi WCU yang disediakan untuk sebuah tabel atau GSI.

4. OnlineIndexConsumedWriteCapacity

  • Perhatikan jumlah WCU yang dikonsumsi saat menambahkan GSI baru ke tabel. Perhatikan bahwa ConsumedWriteCapacityUnits untuk GSI tidak menyertakan WCU yang digunakan selama pembuatan indeks.

  • Jika Anda menyetel WCU untuk GSI terlalu rendah, maka aktivitas penulisan yang masuk selama fase pengisian ulang mungkin akan di-throttle.

5. OnlineIndexThrottleEvents

  • Tinjau jumlah peristiwa pembatasan penulisan yang terjadi saat menambahkan GSI baru ke tabel.

  • Jika ternyata WCU disetel terlalu rendah dan di-throttle, Anda dapat memperbarui nilai WCU untuk GSI bahkan selama pengisian ulang.

6. Provisioned Read/Write

  • Lihat berapa banyak unit kapasitas baca atau tulis yang disediakan yang digunakan selama jangka waktu tertentu, untuk tabel atau indeks sekunder global tertentu.

  • Perhatikan bahwa dimensi TableName mengembalikan ProvisionedReadCapacityUnits untuk tabel hanya secara default. Guna melihat jumlah unit kapasitas baca atau tulis yang disediakan untuk indeks sekunder global, Anda harus menentukan kedua TableName dan GlobalSecondaryIndexName.

7. Consumed Read/Write

  • Lihat berapa banyak unit kapasitas baca atau tulis yang dikonsumsi selama jangka waktu tertentu.

Untuk informasi selengkapnya tentang DynamoDB Metrics, CloudWatch lihat Metrik dan Dimensi.