Diagnosticar o controle de utilização - Amazon DynamoDB

Diagnosticar o controle de utilização

Quando sua aplicação sofre controle de utilização, o DynamoDB fornece informações detalhadas sobre exceções e métricas específicas do CloudWatch para ajudar você a diagnosticar esses eventos.

Esta seção apresenta uma abordagem sistemática para entender os eventos de controle de utilização em aplicações do DynamoDB. Ela mostra como interpretar exceções de controle de utilização, correlacioná-las às métricas do CloudWatch para obter insights mais detalhados e entender quais alterações podem reduzir o controle de utilização em suas aplicações do DynamoDB.

Conceitos básicos sobre as exceções de controle de utilização

Quando o DynamoDB controla uma solicitação, ele exibe exceções específicas com informações detalhadas de diagnóstico. Por exemplo, em Java, essas exceções incluem ProvisionedThroughputExceededException, RequestLimitExceeded ou ThrottlingException.

Cada exceção inclui ThrottlingReasons, um conjunto de ThrottlingReason individual que contém dois campos principais para ajudar você a identificar e entender o controle de utilização:

  • Um motivo: um campo concatenado que segue o formato <ResourceType><OperationType><LimitType>.

  • ARN do recurso: o nome do recurso da Amazon (ARN) da tabela ou do índice afetado

O campo do motivo segue um padrão consistente que ajuda você a entender exatamente o que está acontecendo:

  • ResourceType (o que está sofrendo controle de utilização): Table ou Index.

  • OperationType (o tipo de operação): Read ou Write.

  • LimitType (por que o controle de utilização ocorreu):

    • KeyRangeThroughputExceeded: isso ocorre quando uma partição específica que abriga sua tabela ou índice consome uma capacidade de leitura ou gravação que excede os limites internos de throughput por partição.

    • ProvisionedThroughputExceeded: isso ocorre em uma tabela provisionada ou índice secundário global quando a taxa de consumo de leitura ou gravação excede o valor provisionado.

    • AccountLimitExceeded: isso ocorre em uma tabela ou índice sob demanda quando a taxa de consumo de leitura ou gravação excede a taxa máxima de consumo de uma tabela e dos respectivos índices, conforme definido no nível da conta. É possível solicitar um aumento dessa cota.

    • MaxOnDemandThroughputExceeded: isso ocorre em uma tabela ou índice sob demanda quando a taxa de consumo de leitura ou gravação excede a taxa máxima de consumo que o usuário configurou para a tabela ou o índice. Você pode aumentar esse valor por conta própria para qualquer valor até o limite da conta ou definir como -1 para indicar que não há limite fornecido pelo usuário.

O ARN do recurso identifica exatamente qual tabela ou índice está sofrendo controle de utilização:

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

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

Exemplos de motivos completos de controle de utilização:

  • TableReadProvisionedThroughputExceeded

  • IndexWriteAccountLimitExceeded

Isso ajuda a identificar exatamente qual recurso está sofrendo controle de utilização, que tipo de operação causou isso e por que o controle de utilização ocorreu.

Exemplos de exceção

Exemplo 1: capacidade provisionada excedida em um 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 } } }

Neste exemplo, a aplicação recebe uma ProvisionedThroughputExceededException com o motivo IndexWriteProvisionedThroughputExceeded. As gravações no OrderDateIndex estão sofrendo controle de utilização porque o consumo de gravação excedeu a capacidade de gravação provisionada configurada do GSI.

Exemplo 2: throughput máximo sob demanda excedido

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

Neste exemplo, as leituras da tabela UserSessions estão sofrendo controle de utilização porque excedem o limite máximo de throughput sob demanda configurado na tabela.

Estrutura de diagnóstico de controle de utilização do DynamoDB

Quando sua aplicação se deparar com algum evento de controle de utilização, siga as etapas abaixo para diagnosticar e resolver o problema.

Etapa 1: analisar os detalhes de ThrottlingReason

  1. Verifique o campo Motivo para identificar o motivo específico do controle de utilização. O motivo detalha o tipo de recurso com controle de utilização (tabela ou índice), o tipo de operação que está causando o evento de controle de utilização (leitura ou gravação) e o tipo de limite que foi excedido (partição, throughput provisionado e limite de conta).

  2. Verifique o campo resourceArn para identificar qual recurso (tabela ou GSI) está sofrendo controle de utilização.

  3. Use essas informações associadas para entender o contexto completo do problema de controle de utilização.

    Por exemplo, considere o cenário abaixo, em que você recebe a seguinte exceção ProvisionedThroughputExceededException pelo motivo de controle de utilização TableWriteKeyRangeThroughputExceeded: O resourceARN afetado é arn:aws:dynamodb:us-west-2:123456789012:table/CustomerOrders.

    Essa combinação informa que as operações de gravação em sua tabela CustomerOrders estão sofrendo controle de utilização. O controle de utilização está ocorrendo em nível de partição (não em nível de tabela, caso em que seria exibido como TableWriteProvisionedThroughputExceeded). A causa raiz é que você excedeu a capacidade de throughput máxima em relação a um valor ou intervalo de chave de partição específico, indicando um problema de partição com acesso frequente.

    Compreender essa relação entre os elementos da exceção ajuda a implementar a estratégia de mitigação apropriada. Nesse caso, lidar com a partição com acesso frequente em vez de aumentar a capacidade geral provisionada da tabela.

Etapa 2: identificar e analisar as métricas relacionadas do CloudWatch

  1. Identifique suas métricas: cada motivo de controle de utilização no DynamoDB corresponde diretamente a métricas específicas do CloudWatch que podem ser monitoradas para rastrear e analisar eventos de controle de utilização. É possível deduzir sistematicamente os nomes apropriados das métricas do CloudWatch com base no motivo do controle de utilização.

  2. Correlacione o motivo do controle de utilização às métricas correspondentes do CloudWatch usando esta tabela de referência:

    Motivos completos de controle de utilização e referência de métricas do CloudWatch
    Categoria Motivo do controle de utilização Principais métricas do CloudWatch
    Capacidade provisionada excedida TableReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents
    TableWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents
    IndexReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents (GSI)
    IndexWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents (GSI)
    Limites de partição excedidos TableReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents
    TableWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents
    IndexReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents (GSI)
    IndexWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents (GSI)
    Máximo sob demanda excedido TableReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents
    TableWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents
    IndexReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents (GSI)
    IndexWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents (GSI)
    Limites da conta excedidos TableReadAccountLimitExceeded ReadAccountLimitThrottleEvents
    TableWriteAccountLimitExceeded WriteAccountLimitThrottleEvents
    IndexReadAccountLimitExceeded ReadAccountLimitThrottleEvents (GSIs)
    IndexWriteAccountLimitExceeded WriteAccountLimitThrottleEvents (GSIs)

    Por exemplo, se você recebeu IndexWriteProvisionedThroughputExceeded, no mínimo você deve monitorar a métrica WriteProvisionedThroughputThrottleEvents do CloudWatch para o índice específico identificado no ResourceArn.

  3. Monitore essas métricas no CloudWatch para entender a frequência e o momento dos eventos de controle de utilização, distinguir se o controle de utilização é de leitura ou de gravação, identificar padrões nos horários em que o controle de utilização aumenta e acompanhar suas tendências de utilização de capacidade.

    O DynamoDB publica métricas detalhadas para cada tabela e índice secundário global. As métricas (ReadThrottleEvents, WriteThrottleEvents e ThrottledRequests) agregam todos os eventos de controle de utilização em sua tabela e nos respectivos índices.

Etapa 3: identificar as chaves com controle de utilização e altas taxas de acesso usando o CloudWatch Contributor Insights (para controle de utilização relacionado a partições)

Se você identificou problemas relacionados à partição na Etapa 1 (como erros KeyRangeThroughputExceeded), o CloudWatch Contributor Insights para DynamoDB pode ajudar você a diagnosticar quais chaves específicas estão direcionando o tráfego e enfrentando eventos de controle de utilização em sua tabela ou índice.

  1. Habilite o CloudWatch Contributor Insights para sua tabela ou índice que está sofrendo controle de utilização com base em seu ResourceARN.

    Você pode escolher o modo Chaves limitadas para se concentrar exclusivamente nas chaves com utilização mais limitada. Esse modo é ideal para monitoramento contínuo, pois só processa eventos quando ocorre controle de utilização. Como alternativa, o modo Chaves acessadas e limitadas ajuda você a procurar padrões nas chaves mais acessadas.

  2. Analise os relatórios para identificar padrões problemáticos. Procure chaves com taxas de acesso ou controle de utilização desproporcionalmente altas e correlacione o controle de utilização e os padrões de tráfego. É possível criar painéis integrados associando os grafos do Contributor Insights e as métricas do CloudWatch para o DynamoDB.

Para ter informações detalhadas sobre o CloudWatch Contributor Insights, consulte Analisar acesso a dados usando o CloudWatch Contributor Insights para DynamoDB.

Etapa 4: determinar a solução apropriada

Depois de diagnosticar a causa específica do controle de utilização, implemente a solução recomendada com base em seu contexto específico. A solução apropriada depende de vários fatores, como cenário do controle de utilização, modo de capacidade da tabela, decisões de design de tabela e chave, padrões de acesso e eficiência das consultas, configuração do índice global e secundário e arquitetura geral e pontos de integração do sistema.

Caso queira ver soluções detalhadas para abordar seus cenários específicos de controle de utilização, consulte a seção Guia de resolução de controle de utilização do DynamoDB. Esse recurso oferece estratégias de correção direcionadas, personalizadas de acordo com seu motivo específico de controle de utilização e a configuração do modo de capacidade.

Etapa 5: monitorar seu progresso

  1. Acompanhe as métricas do CloudWatch que correspondem ao seu cenário de controle de utilização.

  2. Valide se suas estratégias de mitigação são eficazes observando se há uma diminuição nos eventos de controle de utilização.