View a markdown version of this page

Diagnostic des problèmes de limitation - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Diagnostic des problèmes de limitation

Lorsque votre application est confrontée à un ralentissement, DynamoDB fournit des informations détaillées sur les exceptions et des CloudWatch mesures ciblées pour vous aider à diagnostiquer ces événements.

Cette section présente une approche systématique pour comprendre les événements de limitation dans vos applications DynamoDB. Il montre comment interpréter les exceptions de limitation, les corréler avec des CloudWatch mesures pour obtenir des informations plus détaillées et comprendre les modifications susceptibles de réduire la limitation dans vos applications DynamoDB.

Comprendre les exceptions de limitation

Lorsque DynamoDB limite une demande, il renvoie des exceptions spécifiques avec des informations de diagnostic détaillées. Parmi ces exceptions, citons notamment ProvisionedThroughputExceededException, RequestLimitExceeded ou ThrottlingException, en Java.

Chaque exception inclut un attribut ThrottlingReasons, qui rassemble des éléments ThrottlingReason individuels contenant deux champs clés pour vous aider à identifier et à comprendre la limitation :

  • Raison : champ concaténé respectant le format <ResourceType><OperationType><LimitType>

  • ARN de la ressource : Amazon Resource Name (ARN) de la table ou de l’index concerné

Le champ Raison respecte un schéma cohérent qui vous permet de comprendre exactement ce qui se passe :

  • ResourceType(Ce qui est limité) : ou Table Index

  • OperationType(Quel type d'opération) : Read ou Write

  • LimitType(Pourquoi l'étranglement s'est produit) :

    • KeyRangeThroughputExceeded : cette exception a lieu lorsqu’une partition spécifique sur laquelle repose votre table ou votre index a consommé une capacité de lecture ou d’écriture dépassant les limites de débit internes par partition.

    • ProvisionedThroughputExceeded : cette exception a lieu sur une table provisionnée ou un index secondaire global provisionné lorsque le taux de consommation en lecture ou en écriture a dépassé le montant provisionné.

    • AccountLimitExceeded : cette exception a lieu sur une table à la demande ou un index à la demande lorsque le taux de consommation en lecture ou en écriture a dépassé le taux de consommation maximal pour une table et ses index, tel que défini au niveau du compte. Vous pouvez demander une augmentation de ce quota.

    • MaxOnDemandThroughputExceeded : cette exception a lieu sur une table à la demande ou un index à la demande lorsque le taux de consommation en lecture ou en écriture a dépassé le taux de consommation maximal fourni par l’utilisateur et configuré pour cette table ou cet index. Vous pouvez vous-même augmenter cette valeur à votre gré dans les limites spécifiées au niveau du compte ou la définir sur -1 pour indiquer qu’aucune limite n’est fournie par l’utilisateur.

L’ARN de la ressource identifie précisément la table ou l’index qui est limité :

  • Pour les tables : arn:aws:dynamodb:[region]:[account-id]:table/[table-name]

  • Pour les index : arn:aws:dynamodb:[region]:[account-id]:table/[table-name]/index/[index-name]

Exemples de raisons complètes de limitation :

  • TableReadProvisionedThroughputExceeded

  • IndexWriteAccountLimitExceeded

Cela permet d’identifier exactement quelle ressource est limitée, quel type d’opération en est la cause et pourquoi cette limitation a eu lieu.

Exemples d’exception

Exemple 1 : dépassement de la capacité provisionnée sur 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 } } }

Dans cet exemple, l’application reçoit une exception ProvisionedThroughputExceededException avec la raison IndexWriteProvisionedThroughputExceeded. Les écritures dans l’index OrderDateIndex sont limitées, car la consommation en écriture a dépassé la capacité d’écriture provisionnée configurée pour ce GSI.

Exemple 2 : débit On-demand maximal dépassé

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

Dans cet exemple, les lectures de la table UserSessions sont limitées, car elles dépassent la limite de débit maximale à la demande configurée pour cette table.

Cadre de diagnostic des limitations DynamoDB

Lorsque votre application est confrontée à une limitation, procédez comme suit pour diagnostiquer et résoudre le problème.

Étape 1 : analyser les détails du champ ThrottlingReason

  1. Vérifiez le champ Raison pour identifier la raison précise de la limitation. Celui-ci détaille le type de ressource limitée (table ou index), le type d’opération à l’origine de l’événement de limitation (lecture ou écriture) et le type de limite dépassé (partition, débit provisionné, limite de compte).

  2. Vérifiez le champ resourceArn pour identifier la ressource (table ou GSI) qui est limitée.

  3. Utilisez ces informations combinées pour comprendre le contexte complet du problème de limitation.

    Par exemple, imaginez un scénario dans lequel vous recevez l’exception ProvisionedThroughputExceededException suivante avec la raison de limitation TableWriteKeyRangeThroughputExceeded. Le champ resourceArn concerné est arn:aws:dynamodb:us-west-2:123456789012:table/CustomerOrders.

    Cette combinaison vous indique que les opérations d’écriture dans votre table CustomerOrders sont limitées. La limitation a lieu au niveau de la partition (et non au niveau de la table, auquel cas TableWriteProvisionedThroughputExceeded serait affiché). La cause racine est que vous avez dépassé la capacité de débit maximale pour une valeur ou une plage de clés de partition spécifique, ce qui indique un problème de partition critique.

    Comprendre cette relation entre les différents éléments de l’exception vous aide à mettre en œuvre la stratégie d’atténuation appropriée. Dans ce cas, il s’agit de traiter la partition critique plutôt que d’augmenter la capacité provisionnée globale de la table.

Étape 2 - Identifiez et analysez les CloudWatch métriques associées

  1. Identifiez vos indicateurs : chaque raison de limitation dans DynamoDB correspond directement à des CloudWatch mesures spécifiques que vous pouvez surveiller pour suivre et analyser les événements de limitation. Vous pouvez déduire systématiquement les noms de CloudWatch métriques appropriés à partir de la raison de la limitation.

  2. Faites correspondre la raison de votre limitation aux CloudWatch mesures correspondantes à l'aide de ce tableau de référence :

    Référence complète des raisons de la limitation et des indicateurs CloudWatch
    Catégorie Raison de la limitation CloudWatch Indicateurs principaux
    Dépassement de la capacité provisionnée TableReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents
    TableWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents
    IndexReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents (GSI)
    IndexWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents (GSI)
    Dépassement des limites de partition TableReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents
    TableWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents
    IndexReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents (GSI)
    IndexWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents (GSI)
    On-demand maximum dépassé TableReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents
    TableWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents
    IndexReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents (GSI)
    IndexWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents (GSI)
    Dépassement des limites du compte TableReadAccountLimitExceeded ReadAccountLimitThrottleEvents
    TableWriteAccountLimitExceeded WriteAccountLimitThrottleEvents
    IndexReadAccountLimitExceeded ReadAccountLimitThrottleEvents (GSI)
    IndexWriteAccountLimitExceeded WriteAccountLimitThrottleEvents (GSI)

    Par exemple, si vous avez reçuIndexWriteProvisionedThroughputExceeded, au minimum, vous devez surveiller la WriteProvisionedThroughputThrottleEvents CloudWatch métrique pour l'indice spécifique identifié dans leResourceArn.

  3. Surveillez ces indicateurs CloudWatch pour comprendre la fréquence et le calendrier des événements de limitation, faire la différence entre la limitation en lecture et en écriture, identifier les modèles temporels d'augmentation de la limitation et suivre les tendances de votre utilisation des capacités.

    DynamoDB publie des métriques détaillées pour chaque table et chaque index secondaire global. Les métriques (ReadThrottleEvents, WriteThrottleEvents et ThrottledRequests) regroupent tous les événements de limitation de votre table et de ses index.

Étape 3 - Identifiez vos clés bloquées et vos taux d'accès élevés à l'aide de CloudWatch Contributor Insights (pour la limitation liée aux partitions)

Si vous avez identifié des problèmes liés à la partition à l'étape 1 (tels que KeyRangeThroughputExceeded des erreurs), CloudWatch Contributor Insights for DynamoDB peut vous aider à diagnostiquer quelles clés spécifiques génèrent votre trafic et rencontrent des événements de limitation dans votre table ou votre index.

  1. Activez CloudWatch Contributor Insights pour votre tableau restreint ou votre index en fonction de votre. ResourceARN

    Vous pouvez choisir le mode Clés limitées pour vous concentrer exclusivement sur les clés les plus limitées. Ce mode est idéal pour la surveillance continue, car il ne traite les événements qu’en cas de limitation. Sinon, le mode Clés consultées et limitées vous permet d’identifier des modèles récurrents au niveau des clés les plus consultées.

  2. Analysez les rapports pour identifier les modèles problématiques. Recherchez les clés présentant des taux d’accès ou de limitation excessivement élevés, puis mettez en corrélation la limitation avec les modèles de trafic. Vous pouvez créer des tableaux de bord intégrés combinant des graphiques Contributor Insights et des métriques DynamoDB CloudWatch .

  3. Si aucune touche individuelle n'affiche des taux d'accès ou de limitation excessivement élevés, la limitation de la plage de touches peut être provoquée par un accès séquentiel illimité sur une plage de touches plutôt que par une seule touche de raccourci. Lorsque vous exécutez Scan des opérations continues, limitez le trafic de lecture pour rester en dessous du maximum par partition de 3 000 unités de lecture par seconde pour une plage de clés. Pour obtenir un débit de lecture global plus élevé, utilisez des scans parallèles (segmentés) afin de répartir le trafic de lecture de manière plus uniforme entre les partitions. De même, l'écriture d'éléments dans le même ordre de touches que celui dans lequel ils sont renvoyés par a Scan concentre les écritures sur une plage de touches à la fois et peut entraîner une limitation de la plage de touches lorsque la vitesse d'écriture de cette plage dépasse 1 000 unités d'écriture par seconde. Rate-limit écrit sur une seule plage de touches pour rester en dessous de cette limite.

Pour plus d'informations sur l'activation et l'utilisation de CloudWatch Contributor Insights, voir Utilisation de CloudWatch Contributor Insights pour DynamoDB.

Étape 4 : déterminer la solution appropriée

Après avoir diagnostiqué la cause spécifique de la limitation, mettez en œuvre la solution recommandée en fonction de votre contexte spécifique. La solution appropriée dépend de plusieurs facteurs, notamment de votre scénario de limitation, du mode de capacité de la table, des décisions de conception de la table et des clés, de l’efficacité des requêtes et des modèles d’accès, de la configuration des index globaux et secondaires, ainsi que de l’architecture globale du système et des points d’intégration.

Pour obtenir des solutions détaillées répondant à vos scénarios de limitation spécifiques, consultez la section Guide de résolution des problèmes de limitation de DynamoDB. Cette ressource fournit des stratégies de correction ciblées adaptées à la raison particulière de la limitation et à la configuration du mode de capacité.

Étape 5 : suivre vos progrès

  1. Suivez vos CloudWatch indicateurs qui correspondent à votre scénario de limitation.

  2. Pour confirmer que vos stratégies d’atténuation sont efficaces, vous devriez constater une diminution des événements de limitation.