Evaluar la capacidad aprovisionada para lograr un aprovisionamiento del tamaño adecuado - Amazon DynamoDB

Evaluar la capacidad aprovisionada para lograr un aprovisionamiento del tamaño adecuado

En esta sección se proporciona información general sobre cómo evaluar si tiene aprovisionamiento del tamaño adecuado en las tablas de DynamoDB. A medida que evolucione la carga de trabajo, debe modificar los procedimientos operativos de manera adecuada, especialmente si la tabla de DynamoDB está configurada en modo aprovisionado y corre el riesgo de aprovisionar en exceso o de manera insuficiente las tablas.

Los procedimientos que se describen a continuación requieren información estadística que se debe capturar de las tablas de DynamoDB que son compatibles con la aplicación de producción. Para entender el comportamiento de la aplicación, debe definir un periodo de tiempo que sea lo suficientemente significativo como para captar la estacionalidad de los datos de la aplicación. Por ejemplo, si la aplicación muestra patrones semanales, utilizar un periodo de tres semanas debería darle suficiente espacio para analizar las necesidades de rendimiento de la aplicación.

Si no sabe por dónde empezar, utilice al menos un mes de uso de datos para los cálculos que se indican a continuación.

Al evaluar la capacidad, las tablas de DynamoDB pueden configurar las unidades de capacidad de lectura (RCU) y las unidades de capacidad de escritura (WCU) de forma independiente. Si las tablas tienen algún índice secundario global (GSI) configurado, deberá especificar el rendimiento que consumirá, que también será independiente de las RCU y las WCU de la tabla base.

nota

Los índices secundarios locales (LSI) consumen capacidad de la tabla base.

Cómo recuperar las métricas de consumo de las tablas de DynamoDB

Para evaluar la tabla y la capacidad del GSI, monitoree las siguientes métricas de CloudWatch y seleccione la dimensión adecuada para recuperar la información de la tabla o del GSI:

Unidades de capacidad de lectura Unidades de capacidad de escritura

ConsumedReadCapacityUnits

ConsumedWriteCapacityUnits

ProvisionedReadCapacityUnits

ProvisionedWriteCapacityUnits

ReadThrottleEvents

WriteThrottleEvents

Puede hacer esto a través de la AWS CLI o la AWS Management Console.

AWS CLI

Antes de recuperar las métricas de consumo de la tabla, tendremos que empezar por capturar algunos puntos de datos históricos mediante la API de CloudWatch.

Comience por crear dos archivos: write-calc.json y read-calc.json. Estos archivos representarán los cálculos de una tabla o GSI. Deberá actualizar algunos de los campos, como se indica en la tabla siguiente, para que coincidan con el entorno.

Nombre del campo Definición Ejemplo
<table-name> El nombre de la tabla que analizará SampleTable
<period> El periodo de tiempo que utilizará para evaluar el objetivo de utilización, en segundos Para un periodo de 1 hora, debe especificar: 3600
<start-time> El comienzo del intervalo de evaluación, especificado en formato ISO8601 2022-02-21T23:00:00
<end-time> El final del intervalo de evaluación, especificado en formato ISO8601 2022-02-22T06:00:00

El archivo de cálculos de escritura recuperará la cantidad de WCU aprovisionadas y consumidas en el periodo de tiempo del intervalo de fechas especificado. También generará un porcentaje de utilización que se usará para el análisis. El contenido completo del archivo write-calc.json debe ser similar al siguiente:

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

El archivo de cálculos de lectura utiliza un archivo similar. Este archivo recuperará cuántas RCU se aprovisionaron y consumieron durante el periodo de tiempo del intervalo de fechas especificado. El contenido del archivo read-calc.json debe ser similar al siguiente:

{ "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 vez que haya creado los archivos, podrá empezar a recuperar los datos de uso.

  1. Para recuperar los datos de utilización de escritura, ejecute el siguiente comando:

    aws cloudwatch get-metric-data --cli-input-json file://write-calc.json
  2. Para recuperar los datos de utilización de lectura, ejecute el siguiente comando:

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

El resultado de ambas consultas será una serie de puntos de datos en formato JSON que se utilizarán para el análisis. El resultado dependerá de la cantidad de puntos de datos que haya especificado, del periodo y de los propios datos de carga de trabajo específicos. Podría tener un aspecto similar al siguiente:

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

Si especifica un periodo corto y un intervalo de tiempo largo, es posible que tenga que modificar MaxDatapoints, que es el valor predeterminado establecido en 24 en el script. Este representa un punto de datos por hora y 24 por día.

AWS Management Console
  1. Inicie sesión en la AWS Management Console y navegue hasta la página del servicio de CloudWatch en Introducción a AWS Management Console. Seleccione la región de AWS adecuada si es necesario.

  2. Localice la sección de métricas en la barra de navegación izquierda y seleccione All metrics (Todas las métricas).

  3. Esto abrirá un panel con dos paneles. El panel superior le mostrará el gráfico y el panel inferior tendrá las métricas que desea representar en un gráfico. Seleccione el panel de DynamoDB.

  4. Seleccione la categoría Table Metrics (Métricas de tabla) en los subpaneles. Esto le mostrará las tablas en la región actual.

  5. Identifique el nombre de la tabla desplazándose hacia abajo en el menú y seleccionando las métricas de operaciones de escritura: ConsumedWriteCapacityUnits y ProvisionedWriteCapacityUnits

    nota

    En este ejemplo se habla de las métricas de las operaciones de escritura, pero también puede utilizar estos pasos para representar gráficamente las métricas de las operaciones de lectura.

  6. Seleccione la pestaña Graphed metrics (2) (Métricas gráficas [2]) para modificar las fórmulas. De forma predeterminada, CloudWatch seleccionará la función estadística Average (Media) para los gráficos.

  7. Con ambas métricas gráficas seleccionadas (la casilla de verificación de la izquierda), seleccione el menú Add math (Agregar matemáticas), seguido de Common (Común) y, a continuación, seleccione la función Percentage (Porcentaje). Repita el procedimiento dos veces.

    Selección por primera vez de la función Percentage (Porcentaje):

    Selección por segunda vez de la función Percentage (Porcentaje):

  8. En este punto, debería tener cuatro métricas en el menú inferior. Vamos a trabajar en el cálculo de ConsumedWriteCapacityUnits. Para ser coherentes, necesitamos hacer coincidir los nombres con los que usamos en la sección de la AWS CLI. Haga clic en ID de m1 y cambie este valor a consumedWCU.

  9. Cambie la estadística de Average (Media) a Sum (Suma). Esta acción creará automáticamente otra métrica llamada ANOMALY_DETECTION_BAND. Para conocer el alcance de este procedimiento, podemos ignorarlo eliminando la casilla de verificación de la métrica ad1 recién generada.

  10. Repita el paso 8 para cambiar el nombre de ID de m2 a provisionedWCU. Deje la estadística establecida en Average (Media).

  11. Seleccione la etiqueta Expression1 y actualice el valor a m1 y la etiqueta a Consumed WCUs (WCU consumidas).

    nota

    Asegúrese de haber seleccionado solo m1 (casilla de verificación de la izquierda) y provisionedWCU para visualizar correctamente los datos. Actualice la fórmula haciendo clic en Details (Detalles) y cambiándola a consumedWCU/PERIOD(consumedWCU). Es posible que este paso también genere otra métrica de ANOMALY_DETECTION_BAND, pero para el alcance de este procedimiento podemos ignorarla.

  12. Ahora debería tener dos gráficos: uno que indica las WCU aprovisionadas en la tabla y otro que indica las WCU consumidas. Es posible que la forma del gráfico sea diferente a la de abajo, pero puede usarla como referencia:

  13. Actualice la fórmula porcentual seleccionando el gráfico Expression2 (e2). Cambie el nombre de las etiquetas e ID a utilizationPercentage. Cambie el nombre de la fórmula para que coincida con 100*(m1/provisionedWCU).

  14. Elimine la casilla de verificación de todas las métricas, excepto de utilizationPercentage, para visualizar los patrones de utilización. El intervalo predeterminado está establecido en 1 minuto, pero no dude en modificarlo según lo necesite.

Esta es una vista de un periodo de tiempo más largo, así como un periodo mayor de 1 hora. Puede ver que hay algunos intervalos en los que la utilización fue superior al 100 %, pero esta carga de trabajo en particular tiene intervalos más largos sin ningún uso.

En este punto, es posible que obtenga resultados diferentes de las imágenes de este ejemplo. Todo depende de los datos de la carga de trabajo. Los intervalos con una utilización superior al 100 % tienden a limitar los eventos. DynamoDB ofrece capacidad de ampliación, pero tan pronto como se complete la capacidad de ampliación, se limitará todo lo que supere el 100 %.

Cómo identificar tablas de DynamoDB con falta de aprovisionamiento

Para la mayoría de las cargas de trabajo, una tabla se considera con falta de aprovisionamiento cuando consume de forma continua más del 80 % de la capacidad aprovisionada.

La capacidad de ampliación es una característica de DynamoDB que permite a los clientes consumir temporalmente más RCU o WCU de las aprovisionadas originalmente (más que el rendimiento aprovisionado por segundo que se definió en la tabla). La capacidad de ampliación se creó para absorber los aumentos repentinos del tráfico debido a eventos especiales o picos de uso. Esta capacidad de ampliación no dura para siempre. Tan pronto como se agoten las RCU y WCU no utilizadas, se verá limitado si intenta consumir más capacidad de la aprovisionada. Cuando el tráfico de la aplicación se acerca a la tasa de utilización del 80 %, el riesgo de limitación es significativamente mayor.

La regla de la tasa de utilización del 80 % varía según la estacionalidad de los datos y el crecimiento del tráfico. Considere los siguientes escenarios:

  • Si el tráfico se ha mantenido estable a una tasa de utilización de aproximadamente el 90 % durante los últimos 12 meses, la tabla tiene la capacidad adecuada

  • Si el tráfico de la aplicación crece a un ritmo del 8 % mensual en menos de 3 meses, llegará al 100 %

  • Si el tráfico de la aplicación crece a un ritmo del 5 % mensual en un poco más de 4 meses, llegará al 100 %

Los resultados de las consultas anteriores proporcionan una imagen de la tasa de utilización. Úselos como guía para evaluar con más detalle otras métricas que pueden ayudarle a aumentar la capacidad de la tabla según sea necesario (por ejemplo, una tasa de crecimiento mensual o semanal). Trabaje con el equipo de operaciones para definir cuál es un buen porcentaje para la carga de trabajo y las tablas.

Hay escenarios especiales en los que los datos están sesgados cuando los analizamos a diario o semanalmente. Por ejemplo, en el caso de las aplicaciones estacionales que tienen picos de uso durante las horas de trabajo (pero que luego se reducen a casi cero fuera del horario laboral), podría resultar beneficioso programar el escalado automático en el que se especifiquen las horas del día (y los días de la semana) para aumentar la capacidad aprovisionada y cuándo reducirla. En lugar de optar por una mayor capacidad para cubrir las horas más ocupadas, también puede aprovechar las configuraciones de escalado automático de tablas de DynamoDB si la estacionalidad es menos pronunciada.

nota

Al crear una configuración de escalado automático de DynamoDB para la tabla base, recuerde incluir otra configuración para cualquier GSI que esté asociado a la tabla.

Cómo identificar tablas de DynamoDB con exceso de aprovisionamiento

Los resultados de la consulta obtenidos de los scripts anteriores proporcionan los puntos de datos necesarios para realizar algunos análisis iniciales. Si el conjunto de datos presenta valores de utilización inferiores al 20 % durante varios intervalos, es posible que la tabla tenga sobreaprovisionamiento. Para definir con más detalle si necesita reducir el número de WCU y RCU, debe revisitar las demás lecturas en los intervalos.

Cuando las tablas contienen varios intervalos de uso bajo, puede beneficiarse mucho del uso de políticas de escalado automático, ya sea programando el escalado automático o simplemente configurando las políticas de escalado automático predeterminadas para la tabla, que se basan en la utilización.

Si tiene una carga de trabajo con una relación de limitación entre baja utilización y alta (Max(ThrottleEvents)/Min(ThrottleEvents) en el intervalo), esto podría ocurrir cuando tenga una carga de trabajo muy elevada, en la que el tráfico aumente considerablemente durante algunos días (u horas), pero en general el tráfico es continuamente bajo. En estos escenarios, puede resultar beneficioso utilizar el escalado automático programado.