Valuta la capacità fornita per un provisioning della giusta dimensione nella tabella DynamoDB - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Valuta la capacità fornita per un provisioning della giusta dimensione nella tabella DynamoDB

In questa sezione viene fornita una panoramica su come valutare se il provisioning è di dimensioni appropriate per le tabelle DynamoDB. Man mano che il carico di lavoro si evolve, è necessario modificare le procedure operative in modo appropriato, soprattutto quando la tabella DynamoDB è configurata in modalità assegnata e si corre il rischio di provisioning eccessivo o insufficiente delle tabelle.

Le procedure descritte di seguito richiedono informazioni statistiche che devono essere acquisite dalle tabelle DynamoDB che supportano l'applicazione di produzione. Per comprendere il comportamento dell'applicazione, è necessario definire un periodo di tempo sufficientemente significativo per acquisire la stagionalità dei dati dall'applicazione. Ad esempio, se l'applicazione mostra pattern settimanali, l'utilizzo di un periodo di tre settimane dovrebbe fornire spazio sufficiente per analizzare le esigenze di velocità di trasmissione effettiva dell'applicazione.

Se non sai da dove iniziare, utilizza almeno un mese di utilizzo dei dati per i calcoli seguenti.

Durante la valutazione della capacità, le tabelle DynamoDB possono configurare le unità di capacità di lettura RCUs () e le unità di capacità di scrittura () in modo indipendente. WCU Se nelle tabelle sono configurati degli indici secondari globali (GSI), sarà necessario specificare il throughput che verrà utilizzato, che sarà anche indipendente dalla e dalla RCUs tabella di base. WCUs

Nota

Gli indici secondari locali (LSI) consumano la capacità della tabella di base.

Come recuperare le metriche di consumo nelle tabelle DynamoDB

Per valutare la tabella e la GSI capacità, monitora le seguenti CloudWatch metriche e seleziona la dimensione appropriata per recuperare la tabella o le informazioni: GSI

unità di capacità in lettura Unità di capacità in scrittura

ConsumedReadCapacityUnits

ConsumedWriteCapacityUnits

ProvisionedReadCapacityUnits

ProvisionedWriteCapacityUnits

ReadThrottleEvents

WriteThrottleEvents

È possibile eseguire questa operazione tramite AWS CLI o il. AWS Management Console

AWS CLI

Prima di recuperare le metriche di consumo della tabella, dovremo iniziare acquisendo alcuni dati storici utilizzando il. CloudWatch API

Inizia creando due file: write-calc.json e read-calc.json. Questi file rappresenteranno i calcoli per una tabella o. GSI Dovrai aggiornare alcuni campi, come indicato nella tabella seguente, in modo che corrispondano al tuo ambiente.

Nome campo Definizione Esempio
<table-name> Il nome della tabella che verrà analizzata SampleTable
<period> Il periodo di tempo che utilizzerai per valutare il target di utilizzo, in secondi Per un periodo di 1 ora è necessario specificare: 3600
<start-time> L'inizio dell'intervallo di valutazione, specificato nel formato ISO86 01 2022-02-21T23:00:00
<end-time> La fine dell'intervallo di valutazione, specificata nel formato 01 ISO86 2022-02-22T06:00:00

Il file di calcolo di scrittura recupererà il numero di dati WCU forniti e consumati nel periodo di tempo per l'intervallo di date specificato. Genererà inoltre una percentuale di utilizzo che verrà utilizzata per l'analisi. Il contenuto completo del file write-calc.json deve corrispondere a quanto segue:

{ "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 }

Il file di calcolo delle letture utilizza un file simile. Questo file recupererà quanti ne RCUs sono stati forniti e consumati durante il periodo di tempo per l'intervallo di date specificato. Il contenuto del file read-calc.json deve corrispondere a quanto segue:

{ "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 }

Una volta creati i file, è possibile iniziare a recuperare i dati di utilizzo.

  1. Per recuperare i dati di utilizzo delle scritture, esegui il seguente comando:

    aws cloudwatch get-metric-data --cli-input-json file://write-calc.json
  2. Per recuperare i dati di utilizzo delle letture, esegui il seguente comando:

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

Il risultato di entrambe le query sarà una serie di punti dati in JSON formato che verranno utilizzati per l'analisi. Il risultato dipenderà dal numero di punti dati specificati, dal periodo e dai dati specifici del carico di lavoro. Potrebbe essere simile a quanto segue:

{ "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": [] }
Nota

Se si specifica un periodo breve e un intervallo di tempo lungo, potrebbe essere necessario modificare il MaxDatapoints che, per impostazione predefinita, è impostato su 24 nello script. Ciò rappresenta un punto dati per ora e 24 al giorno.

AWS Management Console
  1. Accedi AWS Management Console e vai alla pagina del CloudWatch servizio. Seleziona un'opzione appropriata, Regione AWS se necessario.

  2. Individua la sezione Metriche nella barra di navigazione a sinistra e seleziona Tutte le metriche.

  3. Verrà aperto un pannello di controllo con due pannelli. Il pannello superiore mostrerà la grafica e il pannello inferiore mostrerà le metriche che desideri rappresentare graficamente. Scegli DynamoDB.

  4. Scegli Table Metrics. Questa sezione mostrerà le tabelle relative alla regione corrente.

  5. Usa la casella di ricerca per cercare il nome della tabella e scegli le metriche dell'operazione di scrittura: e ConsumedWriteCapacityUnits ProvisionedWriteCapacityUnits

    Nota

    Questo esempio illustra le metriche delle operazioni di scrittura, ma puoi anche utilizzare questi passaggi per visualizzare graficamente le metriche delle operazioni di lettura.

  6. Scegliete la scheda Metriche grafiche (2) per modificare le formule. Per impostazione predefinita, CloudWatch seleziona la funzione statistica Media per i grafici.

    Le metriche grafiche selezionate e la media come funzione statistica predefinita.
  7. Dopo aver selezionato entrambe le metriche nel grafico (la casella di controllo a sinistra), selezionare il menu Add math (Aggiungi matematica), seguito da Common (Comune), quindi selezionare la funzione Percentage (Percentuale). Ripetere la procedura due volte.

    La prima volta selezionando la funzione Percentage (Percentuale):

    CloudWatch console. La funzione Percentuale è selezionata per le metriche grafiche.

    La seconda volta selezionando la funzione Percentage (Percentuale):

    CloudWatch console. La funzione Percentuale viene selezionata una seconda volta per le metriche rappresentate graficamente.
  8. A questo punto dovresti avere quattro metriche nel menu in basso. Lavoriamo sul calcolo ConsumedWriteCapacityUnits. Per essere coerenti, dobbiamo abbinare i nomi a quelli usati nella AWS CLI sezione. Fai clic sull'ID m1 e modifica questo valore in WCUconsumato.

    CloudWatch console. La metrica rappresentata graficamente con l'ID m1 viene rinominata consumata. WCU

    Rinomina l'etichetta come. ConsumedWriteCapacityUnitconsumedWCU

    La metrica rappresentata graficamente con ConsumedWriteCapacityUnitetichetta viene rinominata consumata. WCU
  9. Modifica della statistica da Average (Media) a Sum (Somma). Questa azione creerà automaticamente un'altra metrica chiamata _ _. ANOMALY DETECTION BAND Nell'ambito di questa procedura, ignoriamola rimuovendo la casella di controllo sulla metrica ad1 appena generata.

    CloudWatch console. La statistica SUMè selezionata nell'elenco a discesa per le metriche rappresentate graficamente.
    CloudWatch console. La BAND metrica ANOMALYDETECTION_ _ viene rimossa dall'elenco delle metriche rappresentate graficamente.
  10. Ripetere il passaggio 8 per rinominare l'ID m2 in provisioned. WCU Lasciare la statistica impostata su Average (Media).

    CloudWatch console. La metrica rappresentata graficamente con m2 ID viene rinominata in provisioned. WCU
  11. Seleziona l'etichetta Expression1 e aggiorna il valore su m1 e l'etichetta su Consumed. WCUs

    Nota

    Assicurati di aver selezionato solo m1 (casella di controllo a sinistra) e di aver effettuato il provisioning WCU per visualizzare correttamente i dati. Aggiorna la formula facendo clic su Dettagli e modificando la formula in consumatoWCU/PERIOD(consumato). WCU Questo passaggio potrebbe generare anche un'altra BAND metrica ANOMALYDETECTION_ _, ma nell'ambito di questa procedura possiamo ignorarla.

    m1 e provisioned WCU sono selezionati. I dettagli per m1 vengono aggiornati come consumatiWCU/PERIOD(consumati). WCU
  12. Ora dovreste avere due grafici: uno che indica il vostro approvvigionamento WCUs sulla tabella e l'altro che indica il consumo. WCUs La forma del grafico potrebbe essere diversa da quella riportata di seguito, ma puoi usarla come riferimento:

    Grafico con i dati forniti WCUs e consumati WCUs per la tabella tracciati.
  13. Aggiornare la formula percentuale selezionando il grafico Expression2 (e2). Rinomina le etichette e in. IDs utilizationPercentage Rinomina la formula in modo che corrisponda a 100* (m1/provisioned). WCU

    CloudWatch console. Le etichette e IDs for Expression2 vengono rinominate in. utilizationPercentage
    CloudWatch console. La formula percentuale per Expression2 viene aggiornata a 100* (m1/provisioned). WCU
  14. Rimuovi la casella di controllo da tutte le metriche tranne per visualizzare i tuoi modelli di utilizzo. utilizationPercentage L'intervallo predefinito è impostato su 1 minuto, ma è possibile modificarlo in base alle proprie esigenze.

    Grafico della utilizationPercentage metrica per l'intervallo di tempo selezionato.

Ecco una vista di un periodo di tempo più lungo e di un periodo maggiore di 1 ora. Puoi vedere che ci sono alcuni intervalli in cui l'utilizzo era superiore al 100%, ma questo particolare carico di lavoro ha intervalli più lunghi con utilizzo pari a zero.

Schema di utilizzo per un periodo prolungato. Evidenzia i periodi di utilizzo superiori al 100% e pari a zero.

A questo punto, potresti avere risultati diversi dalle immagini di questo esempio. Tutto dipende dai dati del carico di lavoro. Gli intervalli con un utilizzo superiore al 100% sono soggetti a eventi di limitazione della larghezza di banda della rete. DynamoDB offre capacità di espansione, ma non appena viene raggiunta la capacità di espansione, qualsiasi valore superiore al 100% verrà limitato.

Come identificare le tabelle DynamoDB con un provisioning insufficiente

Per la maggior parte dei carichi di lavoro, una tabella è considerata con provisioning insufficiente quando consuma costantemente più dell'80% della capacità assegnata.

La capacità burst è una funzionalità di DynamoDB che consente ai clienti di consumare temporaneamente RCUs piùWCUs/di quanto originariamente fornito (più del throughput al secondo assegnato definito nella tabella). La capacità di espansione è stata creata per assorbire improvvisi aumenti di traffico dovuti a eventi speciali o picchi di utilizzo. Questa capacità di espansione ha una durata limitata. Non appena le risorse inutilizzate RCUs WCUs sono esaurite, se si tenta di consumare più capacità di quella fornita, si rischia di subire una limitazione. Quando il traffico delle applicazioni si avvicina al tasso di utilizzo dell'80%, il rischio di limitazione della larghezza di banda della rete è notevolmente maggiore.

La regola del tasso di utilizzo dell'80% varia in base alla stagionalità dei dati e alla crescita del traffico. Considerare i seguenti scenari:

  • Se il traffico è rimasto stabile a un tasso di utilizzo di circa il 90% negli ultimi 12 mesi, la tabella ha la capacità corretta

  • Se il traffico delle applicazioni aumenta a un tasso dell'8% mensile in meno di 3 mesi, si arriverà al 100%

  • Se il traffico delle applicazioni aumenta a un tasso dell'5% mensile in meno di 4 mesi, si arriverà al 100%

I risultati delle query precedenti forniscono un'immagine del tasso di utilizzo. Utilizzali come guida per valutare ulteriormente altre metriche che possono aiutarti a scegliere di aumentare la capacità della tabella in base alle esigenze (ad esempio: un tasso di crescita mensile o settimanale). Collabora con il tuo team operativo per definire qual è una buona percentuale per il carico di lavoro e le tabelle.

Esistono scenari speciali in cui i dati non sono affidabili quando li analizziamo su base giornaliera o settimanale. Ad esempio, con le applicazioni stagionali che presentano picchi di utilizzo durante l'orario di lavoro (ma poi scendono quasi a zero al di fuori dell'orario di lavoro), è possibile trarre vantaggio dalla pianificazione della scalabilità automatica in cui si specificano le ore del giorno (e i giorni della settimana) per aumentare la capacità fornita e quando ridurla. Invece di puntare a una maggiore capacità per coprire le ore di punta, puoi anche trarre vantaggio dalle configurazioni di scalabilità automatica delle tabelle di DynamoDB se la stagionalità è meno pronunciata.

Nota

Quando crei una configurazione di scalabilità automatica di DynamoDB per la tua tabella di base, ricorda di includere un'altra configurazione GSI per qualsiasi configurazione associata alla tabella.

Come identificare le tabelle DynamoDB con provisioning eccessivo

I risultati delle query ottenuti dagli script precedenti forniscono i dati necessari per eseguire alcune analisi iniziali. Se il set di dati presenta valori di utilizzo inferiori al 20% per diversi intervalli, è possibile che la tabella presenti un provisioning eccessivo. Per definire ulteriormente se è necessario ridurre il numero di WCUs eRCUS, è necessario rivedere le altre letture negli intervalli.

Quando le tabelle contengono diversi intervalli di utilizzo ridotti, puoi davvero trarre vantaggio dall'utilizzo di politiche di auto scaling, pianificando la scalabilità automatica o semplicemente configurando le politiche di auto scaling predefinite per la tabella basate sull'utilizzo.

Se hai un carico di lavoro con un basso utilizzo e un rapporto accelerazione elevato (Max (ThrottleEvents) /Min (ThrottleEvents) nell'intervallo), ciò potrebbe accadere quando hai un carico di lavoro molto intenso in cui il traffico aumenta molto durante alcuni giorni (o ore), ma in generale il traffico è costantemente basso. In questi scenari potrebbe essere utile utilizzare la scalabilità automatica pianificata.