Evaluasi kapasitas yang disediakan untuk penyediaan ukuran yang tepat di tabel DynamoDB - Amazon DynamoDB

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

Evaluasi kapasitas yang disediakan untuk penyediaan ukuran yang tepat di tabel DynamoDB

Bagian ini memberikan gambaran umum tentang cara mengevaluasi apakah Anda memiliki ukuran penyediaan yang tepat pada tabel DynamoDB Anda. Seiring berkembangnya beban kerja Anda, Anda harus memodifikasi prosedur operasional dengan tepat, terutama ketika tabel DynamoDB Anda dikonfigurasi dalam mode yang disediakan dan Anda memiliki risiko untuk menyediakan tabel secara berlebihan atau kurang.

Prosedur yang dijelaskan di bawah memerlukan informasi statistik yang harus diambil dari tabel DynamoDB yang mendukung aplikasi produksi Anda. Untuk memahami perilaku aplikasi Anda, Anda harus menentukan periode waktu yang cukup signifikan untuk mengambil data musiman dari aplikasi Anda. Misalnya, jika aplikasi Anda menunjukkan pola mingguan, menggunakan periode tiga minggu akan memberi Anda cukup ruang untuk menganalisis kebutuhan throughput aplikasi.

Jika Anda tidak tahu harus mulai dari mana, gunakan penggunaan data setidaknya selama satu bulan untuk penghitungan di bawah ini.

Saat mengevaluasi kapasitas, tabel DynamoDB dapat mengkonfigurasi Unit Kapasitas Baca RCUs () dan Unit Kapasitas Tulis () secara independen. WCU Jika tabel Anda memiliki Global Secondary Indexes (GSI) yang dikonfigurasi, Anda harus menentukan throughput yang akan dikonsumsi, yang juga akan independen dari RCUs dan WCUs dari tabel dasar.

catatan

Indeks Sekunder Lokal (LSI) mengkonsumsi kapasitas dari tabel dasar.

Cara mengambil metrik penggunaan pada tabel DynamoDB Anda

Untuk mengevaluasi tabel dan GSI kapasitas, pantau CloudWatch metrik berikut dan pilih dimensi yang sesuai untuk mengambil tabel atau GSI informasi:

Unit Kapasitas Baca Unit Kapasitas Tulis

ConsumedReadCapacityUnits

ConsumedWriteCapacityUnits

ProvisionedReadCapacityUnits

ProvisionedWriteCapacityUnits

ReadThrottleEvents

WriteThrottleEvents

Anda dapat melakukan ini baik melalui AWS CLI atau AWS Management Console.

AWS CLI

Sebelum kita mengambil metrik konsumsi tabel, kita harus mulai dengan menangkap beberapa titik data historis menggunakan. CloudWatch API

Mulailah dengan membuat dua file: write-calc.json dan read-calc.json. File-file ini akan mewakili perhitungan untuk tabel atauGSI. Anda harus memperbarui beberapa bidang, seperti yang ditunjukkan pada tabel di bawah ini, agar sesuai dengan lingkungan Anda.

Nama Bidang Definisi Contoh
<table-name> Nama tabel yang akan dianalisis SampleTable
<period> Jangka waktu yang akan Anda gunakan untuk mengevaluasi pemanfaatan target, berdasarkan detik Untuk periode 1 jam, Anda harus menentukan: 3600
<start-time> Awal interval evaluasi Anda, ditentukan dalam format ISO86 01 2022-02-21T23:00:00
<end-time> Akhir interval evaluasi Anda, ditentukan dalam format ISO86 01 2022-02-22T06:00:00

File perhitungan tulis akan mengambil jumlah yang WCU disediakan dan dikonsumsi dalam periode waktu untuk rentang tanggal yang ditentukan. Ini juga akan menghasilkan persentase penggunaan yang akan digunakan untuk analisis. Konten lengkap file write-calc.json akan seperti berikut:

{ "MetricDataQueries": [ { "Id": "provisionedWCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "MetricName": "ProvisionedWriteCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Average" }, "Label": "Provisioned", "ReturnData": false }, { "Id": "consumedWCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "MetricName": "ConsumedWriteCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>"" } ] }, "Period": <period>, "Stat": "Sum" }, "Label": "", "ReturnData": false }, { "Id": "m1", "Expression": "consumedWCU/PERIOD(consumedWCU)", "Label": "Consumed WCUs", "ReturnData": false }, { "Id": "utilizationPercentage", "Expression": "100*(m1/provisionedWCU)", "Label": "Utilization Percentage", "ReturnData": true } ], "StartTime": "<start-time>", "EndTime": "<ent-time>", "ScanBy": "TimestampDescending", "MaxDatapoints": 24 }

File penghitungan baca menggunakan file serupa. File ini akan mengambil berapa banyak RCUs yang disediakan dan dikonsumsi selama periode waktu untuk rentang tanggal yang ditentukan. Konten file read-calc.json akan seperti berikut:

{ "MetricDataQueries": [ { "Id": "provisionedRCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "MetricName": "ProvisionedReadCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Average" }, "Label": "Provisioned", "ReturnData": false }, { "Id": "consumedRCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "MetricName": "ConsumedReadCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Sum" }, "Label": "", "ReturnData": false }, { "Id": "m1", "Expression": "consumedRCU/PERIOD(consumedRCU)", "Label": "Consumed RCUs", "ReturnData": false }, { "Id": "utilizationPercentage", "Expression": "100*(m1/provisionedRCU)", "Label": "Utilization Percentage", "ReturnData": true } ], "StartTime": "<start-time>", "EndTime": "<end-time>", "ScanBy": "TimestampDescending", "MaxDatapoints": 24 }

Setelah membuat file, Anda dapat mulai mengambil data penggunaan.

  1. Untuk mengambil data penggunaan tulis, keluarkan perintah berikut:

    aws cloudwatch get-metric-data --cli-input-json file://write-calc.json
  2. Untuk mengambil data penggunaan baca, keluarkan perintah berikut:

    aws cloudwatch get-metric-data --cli-input-json file://read-calc.json

Hasil untuk kedua kueri akan menjadi serangkaian titik data dalam JSON format yang akan digunakan untuk analisis. Hasil Anda akan tergantung pada jumlah titik data yang Anda tentukan, periode, dan data beban kerja spesifik Anda sendiri. Hasilnya akan seperti berikut:

{ "MetricDataResults": [ { "Id": "utilizationPercentage", "Label": "Utilization Percentage", "Timestamps": [ "2022-02-22T05:00:00+00:00", "2022-02-22T04:00:00+00:00", "2022-02-22T03:00:00+00:00", "2022-02-22T02:00:00+00:00", "2022-02-22T01:00:00+00:00", "2022-02-22T00:00:00+00:00", "2022-02-21T23:00:00+00:00" ], "Values": [ 91.55364583333333, 55.066631944444445, 2.6114930555555556, 24.9496875, 40.94725694444445, 25.61819444444444, 0.0 ], "StatusCode": "Complete" } ], "Messages": [] }
catatan

Jika menentukan jangka waktu pendek dan rentang waktu yang lama, Anda mungkin perlu memodifikasi MaxDatapoints yang secara default ditetapkan ke 24 dalam skrip. Ini mewakili satu titik data per jam dan 24 per hari.

AWS Management Console
  1. Masuk ke AWS Management Console dan arahkan ke halaman CloudWatch layanan. Pilih yang sesuai Wilayah AWS jika perlu.

  2. Temukan bagian Metrik di bilah navigasi kiri dan pilih Semua metrik.

  3. Ini akan membuka dasbor dengan dua panel. Panel atas akan menampilkan grafik, dan panel bawah akan menampilkan metrik yang ingin Anda grafik. Pilih DynamoDB.

  4. Pilih Metrik Tabel. Ini akan menampilkan tabel di Wilayah Anda saat ini.

  5. Gunakan kotak Pencarian untuk mencari nama tabel Anda dan memilih metrik operasi tulis: ConsumedWriteCapacityUnits dan ProvisionedWriteCapacityUnits

    catatan

    Contoh ini membahas metrik operasi tulis, tetapi Anda juga dapat menggunakan langkah-langkah ini untuk membuat grafik metrik operasi baca.

  6. Pilih tab Graphed metrics (2) untuk memodifikasi rumus. Secara default, CloudWatch memilih fungsi statistik Rata-rata untuk grafik.

    Metrik grafik yang dipilih dan Rata-rata sebagai fungsi statistik default.
  7. Saat memilih kedua metrik bergrafik (kotak centang di sebelah kiri) pilih menu Tambahkan perhitungan, diikuti oleh Umum, lalu pilih fungsi Persentase. Ulangi prosedur ini dua kali.

    Pertama kali memilih fungsi Persentase:

    CloudWatch konsol. Fungsi Persentase dipilih untuk metrik grafik.

    Kedua kali memilih fungsi Persentase:

    CloudWatch konsol. Fungsi Persentase dipilih untuk kedua kalinya untuk metrik grafik.
  8. Pada titik ini, Anda memiliki empat metrik di menu bawah. Mari kita kerjakan penghitungan ConsumedWriteCapacityUnits. Agar konsisten, kita perlu mencocokkan nama untuk yang kita gunakan di AWS CLI bagian ini. Klik pada ID m1 dan ubah nilai ini menjadi habis WCU.

    CloudWatch konsol. Metrik grafik dengan ID m1 diubah namanya menjadi consumed. WCU

    Ganti nama ConsumedWriteCapacityUnitlabel sebagaiconsumedWCU.

    Metrik grafik dengan ConsumedWriteCapacityUnitlabel diubah namanya menjadi habis. WCU
  9. Ubah statistik dari Average menjadi Sum. Tindakan ini secara otomatis akan membuat metrik lain yang disebut ANOMALY_ DETECTION _ BAND. Untuk cakupan prosedur ini, mari kita abaikan dengan menghapus kotak centang pada metrik ad1 yang baru dibuat.

    CloudWatch konsol. Statistik SUMdipilih dalam daftar dropdown untuk metrik grafik.
    CloudWatch konsol. BANDMetrik ANOMALYDETECTION_ _ dihapus dari daftar metrik grafik.
  10. Ulangi langkah 8 untuk mengganti nama ID m2 menjadi WCUprovisioned. Biarkan statistik diatur ke Average.

    CloudWatch konsol. Metrik grafik dengan ID m2 diubah namanya menjadi provisioned. WCU
  11. Pilih label Expression1 dan perbarui nilainya ke m1 dan label ke Consumed. WCUs

    catatan

    Pastikan Anda hanya memilih m1 (kotak centang di sebelah kiri) dan disediakan WCU untuk memvisualisasikan data dengan benar. Perbarui rumus dengan mengklik Detail dan mengubah rumus untuk dikonsumsiWCU/PERIOD(dikonsumsiWCU). Langkah ini mungkin juga menghasilkan BAND metrik ANOMALY_ DETECTION _ lain, tetapi untuk ruang lingkup prosedur ini kita dapat mengabaikannya.

    m1 dan provisioned dipilih. WCU Detail untuk m1 diperbarui sebagai dikonsumsiWCU/PERIOD(dikonsumsiWCU).
  12. Anda seharusnya sekarang memiliki dua grafik: satu yang menunjukkan Anda disediakan WCUs di atas meja dan satu lagi yang menunjukkan yang dikonsumsi. WCUs Bentuk grafiknya mungkin berbeda dengan gambar di bawah ini, tetapi Anda dapat menggunakannya sebagai referensi:

    Grafik dengan disediakan WCUs dan dikonsumsi WCUs untuk tabel diplot.
  13. Perbarui rumus persentase dengan memilih grafik Expression2 (e2). Ganti nama label dan IDs menjadi utilizationPercentage. Ganti nama rumus agar cocok dengan 100* (WCUm1/provisioned).

    CloudWatch konsol. Label dan IDs untuk Expression2 diganti namanya menjadi. utilizationPercentage
    CloudWatch konsol. Rumus persentase untuk Expression2 diperbarui ke 100* (m1/provisioned). WCU
  14. Hapus kotak centang dari semua metrik tetapi utilizationPercentageuntuk memvisualisasikan pola pemanfaatan Anda. Interval default diatur ke 1 menit, tetapi Anda dapat mengubahnya sesuai kebutuhan.

    Grafik utilizationPercentage metrik untuk interval waktu yang dipilih.

Berikut adalah tampilan periode waktu yang lebih lama serta periode yang lebih dari 1 jam. Anda dapat melihat ada beberapa interval yang penggunaannya lebih tinggi dari 100%, tetapi beban kerja khusus ini memiliki interval yang lebih panjang dengan penggunaan nol.

Pola pemanfaatan untuk waktu yang lama. Ini menyoroti periode pemanfaatan lebih dari 100% dan nol.

Pada titik ini, Anda mungkin mendapatkan hasil yang berbeda dari gambar dalam contoh ini. Itu semua tergantung pada data dari beban kerja Anda. Interval dengan penggunaan lebih dari 100% rentan terhadap peristiwa throttling. DynamoDB menawarkan kapasitas lonjakan, tetapi segera setelah kapasitas lonjakan dilakukan, apa pun di atas 100% akan dibatasi.

Cara mengidentifikasi tabel DynamoDB yang kurang tersedia

Untuk sebagian besar beban kerja, tabel dianggap kurang tersedia jika terus-menerus menggunakan lebih dari 80% kapasitas yang disediakan.

Kapasitas burst adalah fitur DynamoDB yang memungkinkan pelanggan untuk sementara mengkonsumsi RCUs lebih banyakWCUs/daripada yang disediakan semula (lebih dari throughput yang disediakan per detik yang ditentukan dalam tabel). Kapasitas lonjakan diciptakan untuk menyerap peningkatan lalu lintas tiba-tiba karena peristiwa khusus atau lonjakan penggunaan. Kapasitas lonjakan ini tidak bertahan selamanya. Segera setelah tidak digunakan RCUs dan habis, Anda akan WCUs terhambat jika Anda mencoba untuk mengkonsumsi lebih banyak kapasitas daripada yang disediakan. Ketika lalu lintas aplikasi Anda mendekati tingkat penggunaan 80%, risiko throttling Anda jauh lebih tinggi.

Aturan tingkat penggunaan 80% bervariasi berdasarkan musim data dan pertumbuhan lalu lintas Anda. Pertimbangkan skenario berikut:

  • Jika lalu lintas Anda stabil pada tingkat penggunaan ~90% selama 12 bulan terakhir, tabel Anda memiliki kapasitas yang tepat

  • Jika lalu lintas aplikasi Anda tumbuh sebesar 8% setiap bulan dalam waktu kurang dari 3 bulan, Anda akan mencapai 100%

  • Jika lalu lintas aplikasi Anda tumbuh sebesar 5% dalam waktu lebih dari 4 bulan, Anda masih akan mencapai 100%

Hasil dari kueri di atas memberikan gambaran tingkat penggunaan Anda. Gunakan hasil tersebut sebagai panduan untuk mengevaluasi lebih lanjut metrik lain yang dapat membantu Anda meningkatkan kapasitas tabel sesuai kebutuhan (misalnya: tingkat pertumbuhan bulanan atau mingguan). Bekerjalah dengan tim operasi Anda untuk menentukan persentase yang baik untuk beban kerja dan tabel Anda.

Ada skenario khusus, datanya miring ketika dianalisis setiap hari atau setiap minggu. Misalnya, dengan aplikasi musiman yang memiliki lonjakan penggunaan selama jam kerja (tetapi kemudian turun menjadi hampir nol di luar jam kerja), Anda bisa mendapatkan keuntungan dengan menjadwalkan penskalaan otomatis di mana Anda menentukan jam dalam sehari (dan hari dalam seminggu) untuk meningkatkan kapasitas yang disediakan dan kapan harus menguranginya. Alih-alih bertujuan untuk kapasitas yang lebih tinggi sehingga Anda dapat menutupi jam sibuk, Anda juga dapat memanfaatkan konfigurasi penskalaan otomatis tabel DynamoDB jika musim Anda kurang terasa.

catatan

Saat Anda membuat konfigurasi penskalaan otomatis DynamoDB untuk tabel dasar Anda, ingatlah untuk menyertakan konfigurasi lain GSI untuk semua yang terkait dengan tabel.

Cara mengidentifikasi tabel DynamoDB yang disediakan secara berlebihan

Hasil kueri yang diperoleh dari skrip di atas memberikan titik data yang diperlukan untuk melakukan beberapa analisis awal. Jika set data Anda menyajikan nilai penggunaan yang lebih rendah dari 20% untuk beberapa interval, tabel Anda mungkin disediakan secara berlebihan. Untuk lebih menentukan apakah Anda perlu mengurangi jumlah WCUs danRCUS, Anda harus meninjau kembali bacaan lain dalam interval.

Ketika tabel Anda berisi beberapa interval penggunaan rendah, Anda benar-benar dapat mengambil manfaat dari menggunakan kebijakan penskalaan otomatis, baik dengan menjadwalkan penskalaan otomatis atau hanya mengonfigurasi kebijakan penskalaan otomatis default untuk tabel yang didasarkan pada pemanfaatan.

Jika Anda memiliki beban kerja dengan pemanfaatan rendah terhadap rasio throttle tinggi (Max (ThrottleEvents) /Min () dalam intervalThrottleEvents), ini bisa terjadi ketika Anda memiliki beban kerja yang sangat runcing di mana lalu lintas meningkat banyak selama beberapa hari (atau jam), tetapi secara umum lalu lintas secara konsisten rendah. Dalam skenario ini, mungkin bermanfaat untuk menggunakan penskalaan otomatis terjadwal.