Diagnóstico de limitación - Amazon DynamoDB

Diagnóstico de limitación

Cuando la aplicación experimenta limitación, DynamoDB proporciona información detallada sobre las excepciones y métricas específicas de CloudWatch para ayudarle a diagnosticar estos eventos.

En esta sección, se presenta un enfoque sistemático para entender los eventos de limitación en las aplicaciones de DynamoDB. Muestra cómo interpretar las excepciones de limitación, correlacionarlas con las métricas de CloudWatch para obtener información más detallada y comprender qué cambios reducirían la limitación en las aplicaciones de DynamoDB.

Comprensión de las excepciones de limitación

Cuando DynamoDB limita una solicitud, devuelve excepciones específicas con información de diagnóstico detallada. Por ejemplo, en Java, estas incluyen ProvisionedThroughputExceededException, RequestLimitExceeded o ThrottlingException.

Cada excepción incluye ThrottlingReasons, una recopilación de ThrottlingReason individuales que contiene dos campos clave para ayudarle a identificar y comprender la limitación:

  • Un motivo: un campo concatenado que sigue el formato <ResourceType><OperationType><LimitType>

  • Un ARN de recurso: el nombre de recurso de Amazon (ARN) de la tabla o índice afectado

El campo motivo sigue un patrón coherente que le ayuda a entender exactamente lo que está sucediendo:

  • ResourceType (qué se está limitando): Table o Index

  • OperationType (qué tipo de operación): Read o Write

  • LimitType (motivo por el que se produjo la limitación):

    • KeyRangeThroughputExceeded: esto se produce cuando una partición específica que respalda la tabla o el índice ha consumido una capacidad de lectura o escritura que supera los límites de rendimiento internos por partición.

    • ProvisionedThroughputExceeded: esto se produce en una tabla aprovisionada o en un índice secundario global cuando la tasa de consumo de lectura o escritura ha superado la cantidad aprovisionada.

    • AccountLimitExceeded: esto se produce en una tabla o índice bajo demanda cuando la tasa de consumo de lectura o escritura supera la tasa de consumo máxima para una tabla y sus índices, establecida por cuenta. Puede solicitar un aumento de esta cuota.

    • MaxOnDemandThroughputExceeded: esto se produce en una tabla o índice bajo demanda cuando la tasa de consumo de lectura o escritura ha superado la tasa de consumo máxima proporcionada por el usuario configurada para la tabla o el índice. Puede aumentar este valor usted mismo a cualquier valor hasta el límite de la cuenta o establecerlo en -1 para indicar que el usuario no ha proporcionado límite.

El ARN del recurso identifica exactamente qué tabla o índice se está limitando:

  • Para tablas: arn:aws:dynamodb:[region]:[account-id]:table/[table-name]

  • Para índices: arn:aws:dynamodb:[region]:[account-id]:table/[table-name]/index/[index-name]

Ejemplos de motivos de limitación total:

  • TableReadProvisionedThroughputExceeded

  • IndexWriteAccountLimitExceeded

Esto ayuda a identificar exactamente qué recurso se está limitando, qué tipo de operación lo provocó y por qué se produjo la limitación.

Excepciones de ejemplo

Ejemplo 1: se ha superado la capacidad aprovisionada en un GSI

{ "ThrottlingReasons": [ { "reason": "IndexWriteProvisionedThroughputExceeded", "resource": "arn:aws:dynamodb:us-west-2:123456789012:table/CustomerOrders/index/OrderDateIndex" } ], "awsErrorDetails": { "errorCode": "ProvisionedThroughputExceeded", "errorMessage": "The level of configured provisioned throughput for the index was exceeded", "serviceName": "DynamoDB", "sdkHttpResponse": { "statusText": "Bad Request", "statusCode": 400 } } }

En este ejemplo, la aplicación recibe una ProvisionedThroughputExceededException con el motivo IndexWriteProvisionedThroughputExceeded. Las escrituras en el OrderDateIndex se están limitando porque el consumo de escritura ha superado la capacidad de escritura aprovisionada configurada para el GSI.

Ejemplo 2: Se ha superado el rendimiento máximo bajo demanda

{ "ThrottlingReasons": [ { "reason": "TableReadMaxOnDemandThroughputExceeded", "resource": "arn:aws:dynamodb:us-east-1:123456789012:table/UserSessions" } ], "awsErrorDetails": { "errorMessage": "Throughput exceeds the maximum OnDemandThroughput configured on table or index", "errorCode": "ThrottlingException", "serviceName": "DynamoDB", "sdkHttpResponse": { "statusText": "Bad Request", "statusCode": 400 } } }

En este ejemplo, las lecturas de la tabla UserSessions se están limitando porque superan el límite máximo de rendimiento bajo demanda configurado en la tabla.

Marco de diagnóstico de limitación de DynamoDB

Cuando la aplicación encuentre limitaciones, siga estos pasos para diagnosticar y resolver el problema.

Paso 1: analizar los detalles de ThrottlingReason

  1. Compruebe el campo de motivo para identificar el motivo específico de la limitación. El motivo detalla el tipo de recurso limitado (tabla o índice), el tipo de operación que provoca el evento de limitación (lectura o escritura) y el tipo de límite que se ha superado (partición, rendimiento aprovisionado, límite de cuenta).

  2. Compruebe el campo resourceArn para identificar qué recurso (tabla o GSI) se está limitando.

  3. Utilice esta información combinada para comprender todo el contexto del problema de la limitación.

    Por ejemplo, considere este escenario en el que recibe la siguiente excepción ProvisionedThroughputExceededException con un motivo de limitación TableWriteKeyRangeThroughputExceeded. El resourceARN afectado es arn:aws:dynamodb:us-west-2:123456789012:table/CustomerOrders.

    Esta combinación le informa de que las operaciones de escritura en la tabla de CustomerOrders se están limitando. La limitación se produce por partición (no por tabla, que se mostraría como TableWriteProvisionedThroughputExceeded). La causa principal es que ha superado la capacidad de rendimiento máxima para un valor o rango de clave de partición específico, lo que indica que hay un problema de partición caliente.

    Comprender esta relación entre los elementos de excepción le ayudará a implementar la estrategia de mitigación adecuada; en este caso, abordar la partición caliente en lugar de aumentar la capacidad aprovisionada general de la tabla.

Paso 2: identificar y analizar las métricas de CloudWatch relacionadas

  1. Identifique las métricas: cada motivo de limitación en DynamoDB corresponde directamente a métricas específicas de CloudWatch que puede supervisar para realizar un seguimiento y analizar los eventos de limitación. Puede derivar sistemáticamente los nombres de las métricas de CloudWatch adecuados a partir del motivo de la limitación.

  2. Haga coincidir el motivo de la limitación con las métricas de CloudWatch correspondientes mediante esta tabla de referencia:

    Referencia completa sobre los motivos de la limitación y las métricas de CloudWatch
    Categoría Motivo de la limitación Métricas de CloudWatch principales
    Se ha superado la capacidad aprovisionada TableReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents
    TableWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents
    IndexReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents (GSI)
    IndexWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents (GSI)
    Se han superado los límites de partición TableReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents
    TableWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents
    IndexReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents (GSI)
    IndexWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents (GSI)
    Se ha superado el máximo bajo demanda TableReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents
    TableWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents
    IndexReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents (GSI)
    IndexWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents (GSI)
    Se han superado los límites de la cuenta TableReadAccountLimitExceeded ReadAccountLimitThrottleEvents
    TableWriteAccountLimitExceeded WriteAccountLimitThrottleEvents
    IndexReadAccountLimitExceeded ReadAccountLimitThrottleEvents (GSIs)
    IndexWriteAccountLimitExceeded WriteAccountLimitThrottleEvents (GSIs)

    Por ejemplo, si ha recibido IndexWriteProvisionedThroughputExceeded, como mínimo, debe supervisar la métrica de CloudWatch WriteProvisionedThroughputThrottleEvents para el índice específico identificado en el ResourceArn.

  3. Supervise estas métricas en CloudWatch para comprender la frecuencia y el momento de los eventos de limitación, diferenciar entre la limitación de lectura y escritura, identificar patrones de tiempo cuando la limitación aumenta y realizar un seguimiento de las tendencias de utilización de la capacidad.

    DynamoDB publica métricas detalladas para cada tabla e índice secundario global. Las métricas (ReadThrottleEvents, WriteThrottleEvents y ThrottledRequests) agregan todos los eventos de limitación de la tabla y sus índices.

Paso 3: identificar las claves limitadas y las tasas de acceso altas mediante CloudWatch Contributor Insights (para limitación relacionada con particiones)

Si identificó problemas relacionados con las particiones en el paso 1 (por ejemplo, errores KeyRangeThroughputExceeded), CloudWatch Contributor Insights para DynamoDB puede ayudarlo a diagnosticar qué claves específicas generan tráfico y experimentan eventos de limitación en la tabla o índice.

  1. Habilite CloudWatch Contributor Insights para la tabla o índice limitado en función del ResourceARN.

    Puede elegir el modo de Claves limitadas para centrarse exclusivamente en las claves más limitadas. Este modo es ideal para la supervisión continua, ya que solo procesa los eventos cuando se produce una limitación. Como alternativa, el modo Claves a las que se ha accedido y limitadas le ayuda a buscar patrones en las claves a las que más se accede.

  2. Analice los informes para identificar los patrones problemáticos. Busque claves con tasas de acceso o de limitación desproporcionadamente altas y correlacione los patrones de limitación y tráfico. Puede crear paneles integrados que combinen los gráficos de Contributor Insights y las métricas de DynamoDB CloudWatch.

Para obtener más información sobre cómo habilitar y usar CloudWatch Contributor Insights, consulte Uso de CloudWatch Contributor Insights para DynamoDB.

Paso 4: determinar la solución adecuada

Tras diagnosticar la causa específica de la limitación, implemente la solución recomendada en función del contexto específico. La solución adecuada depende de varios factores, incluyendo el escenario de limitación, el modo de capacidad de la tabla, las decisiones de diseño de la tabla y las claves, los patrones de acceso y la eficiencia de las consultas, la configuración de índices globales y secundarios, y la arquitectura general del sistema y los puntos de integración.

Para obtener soluciones detalladas que aborden los escenarios de limitación específicos, consulte la sección Guía de resolución de limitación de DynamoDB. Este recurso proporciona estrategias de corrección específicas personalizadas según el motivo concreto de la limitación y la configuración del modo de capacidad.

Paso 5: supervisar el progreso

  1. Realice un seguimiento de las métricas de CloudWatch que correspondan al escenario de limitación.

  2. Compruebe que las estrategias de mitigación son efectivas observando una disminución en los eventos de limitación.