Passer au contenu

Comment résoudre les problèmes liés à l'utilisation élevée du processeur sur mes instances Amazon DocumentDB ?

Lecture de 8 minute(s)
0

Je souhaite résoudre les problèmes liés à l'utilisation élevée du processeur sur mes instances Amazon DocumentDB (compatible avec MongoDB).

Brève description

L'utilisation du processeur de vos instances Amazon DocumentDB vous aide à comprendre le fonctionnement des ressources actuellement allouées face à la charge de travail continue.

Vous pouvez constater une augmentation de l'utilisation du processeur pour les raisons suivantes :

  • Charges de travail lourdes initiées par l'utilisateur
  • Requêtes non efficaces
  • Surcharge de l'enregistreur du cluster parce que la charge en lecture n'est pas équilibrée dans le cluster
  • Configuration matérielle du lecteur inférieure à celle de l'enregistreur : impossible de synchroniser le lecteur face à la charge de travail élevée en écriture
  • Tâches internes telles que la récupération de mémoire dans le cluster Amazon DocumentDB
  • Trop grand nombre de connexions à la base de données (inactives)
  • Courtes rafales de connexions

Résolution

Utiliser les métriques Amazon CloudWatch

Utilisez CloudWatch pour collecter et analyser les métriques opérationnelles de vos clusters. Utilisez les métriques CloudWatch pour identifier le processeur et ses modèles métriques proportionnels sur de longues périodes.

Examinez et surveillez les métriques suivantes dans la console CloudWatch :

  • Utilisez les métriques DatabaseConnections et DatabaseConnectionsMax pour identifier le nombre de connexions ouvertes selon un calendrier pertinent.
  • Déterminez la charge de travail globale de votre instance Amazon DocumentDB à l'aide des métriques WriteIOPs, ReadIOPs, ReadThroughput et WriteThroughput.
  • Utilisez DocumentsDeleted, DocumentsInserted, DocumentsReturned et DocumentsUpdated pour comprendre la charge de travail des utilisateurs sur votre instance Amazon DocumentDB.
  • Si vous utilisez les classes d'instance T3 ou T4, consultez les métriques CPUCreditBalance et CPUSurplusCreditBalance pour vérifier la limitation du calcul.

Utiliser les métriques de Performance Insights

Utilisez les métriques Amazon DocumentDB Performance Insights pour identifier les requêtes qui contribuent à la charge de la base de données et à l'état d'attente. Dans l'option Gérer les métriques, sélectionnez la moyenne des sessions actives pour examiner la charge et la répartition du processeur (system%, user% ou total%).

Une charge importante se produit lorsque la charge moyenne dépasse le nombre de processeurs virtuels présents sur l'instance. Toutefois, si la charge moyenne est inférieure au nombre de processeurs virtuels pour la classe d'instance de base de données, la limitation du processeur n'est peut-être pas à l'origine de la latence de l’application. Pour identifier la cause de l'utilisation accrue du processeur, examinez la charge moyenne et analysez les états d'attente liés aux E/S, aux verrous et aux loquets.

Utiliser des requêtes de base de données natives

Utilisez des requêtes natives pour analyser la charge de travail et vérifier l'utilisation du processeur. Pour répertorier toutes les opérations qui s'exécutent actuellement sur une instance Amazon DocumentDB, utilisez le shell MongoDB pour exécuter la requête suivante :

db.adminCommand({currentOp: 1, $all: });

Pour répertorier toutes les requêtes bloquées ou exécutées pendant plus de 10 secondes, exécutez la requête suivante qui utilise la commande currentOp :

db.adminCommand({
    aggregate: 1,
    pipeline: [
        {$currentOp: {}},
        {$match: {
            $or: [
                {secs_running: {$gt: 10}},
                {WaitState: {$exists: true}}
            ]
        }},
        {$project: {
            _id:0,
            opid: 1,
            secs_running: 1,
            WaitState: 1,
            blockedOn: 1,
            command: 1
        }}
    ],
    cursor: {}
});

Pour analyser les résultats d'utilisation du système, exécutez la requête suivante sur l'instance qui présente une utilisation élevée du processeur :

db.adminCommand({
    aggregate: 1,
    pipeline: [
        {
            $currentOp: {
                allUsers: true,
                idleConnections: true
            }
        },
        {
            $group: {
                _id: {
                    desc: "$desc",
                    ns: "$ns",
                    WaitState: "$WaitState"
                },
                count: {
                    $sum: 1
                }
            }
        }
    ],
    cursor: {}
});

La requête précédente renvoie un agrégat de toutes les requêtes exécutées dans chaque espace de noms. Elle répertorie également toutes les tâches internes du système et le nombre unique d'états d'attente par espace de noms.

Remarque : la métrique GARBAGE_COLLECTION sous les tâches internes représente l'implémentation du contrôle de simultanéité multiversion (MVCC) dans le cluster Amazon DocumentDB. Il s'agit d'un outil de nettoyage en arrière-plan qui supprime les versions mortes des documents et indique le nombre de mises à jour ou de suppressions de votre base de données. Amazon DocumentDB lance le processus global en fonction de seuils internes au niveau de la collection et entraîne des IOPS en lecture ou en écriture et une utilisation du processeur.

Vérifier l'efficacité des requêtes

Vérifier la surcharge des index des requêtes en écriture

Des index excessifs ou inutilisés peuvent ralentir les opérations d'écriture. Pour améliorer les performances, consultez les statistiques d'utilisation des index pour identifier et supprimer les index inutiles.

Consulter le plan d'exécution de la requête à l'aide de la commande explain

Lorsqu'une requête doit effectuer une recherche dans tous les documents d'une collection, elle ralentit. Pour accélérer la requête, créez des index appropriés.

Pour identifier les champs sur lesquels vous souhaitez créer des index, exécutez la commande explain. Vous pouvez également utiliser les journaux du profileur pour capturer les requêtes de longue durée et les détails de leurs opérations.

Consulter les statistiques des collections

Consultez les statistiques suivantes pour les collections que vous utilisez :

  • Examinez la section Requêtes principales de Performance Insights pour identifier les collections qui contribuent le plus à la charge.
  • Examinez les statistiques de la collection pour comprendre le nombre d'opérations d'insertion, de mise à jour et de suppression effectuées par DocumentDB. Vous pouvez également vérifier le nombre d’analyses d'index et d’analyses de collection complètes effectuées.
  • Divisez vos collections afin de réduire la taille des documents que vous avez besoin de traiter, en particulier si vous devez effectuer un grand nombre d'opérations de mise à jour.

Vérifier les paramètres de journalisation agressive

Amazon DocumentDB priorise l'audit des événements par rapport au trafic de base de données. Si vous n'avez pas besoin d'audit, vous pouvez le désactiver. Si vous avez besoin d'un audit, définissez le paramètre audit_logs pour consigner uniquement les événements nécessaires. Prévoyez une charge accrue et passez à une classe d'instance plus importante si nécessaire.

Pour éviter toute journalisation agressive, dans les journaux du profileur, assurez-vous d'avoir défini la valeur correcte du paramètre profiler_threshold_ms. Examinez la charge de travail de votre application afin d'identifier le seuil approprié dont vous avez besoin pour classer une requête comme étant de longue durée.

Activez l'option d'exportation des journaux pour les journaux que vous souhaitez exporter vers CloudWatch.

Adopter les bonnes pratiques

Transférer la charge de travail en lecture au lecteur

Si vous avez plusieurs instances de base de données dans votre cluster Amazon DocumentDB, transférez la charge de travail en lecture vers votre instance de lecteur. Lorsque vous vous connectez en tant que jeu de réplicas, spécifiez le paramètre readPreference pour la connexion. Si vous spécifiez une préférence de lecture de secondaryPreferred, le client tente d'acheminer les requêtes en lecture vers vos réplicas. Le client tente d'acheminer les requêtes en écriture vers votre instance de base de données principale.

Remarque : les lecteurs finissent par avoir une certaine cohérence. Si une charge de travail nécessite une cohérence de lecture après écriture plus forte, utilisez la préférence de lecture dynamique et remplacez-la au niveau de la requête. Par exemple, vous pouvez définir la préférence secondaryPreferred par défaut au niveau de la connexion afin d'acheminer les requêtes vers les instances secondaires. Si vos requêtes nécessitent une cohérence de lecture après écriture plus forte, vous pouvez remplacer la valeur par défaut et effectuer une lecture depuis le nœud primaire.

Exemple :

db.collection.find().readPref("primary")

Ajouter une ou plusieurs instances de lecteur au cluster

Si vous avez un cluster Amazon DocumentDB avec une seule instance de base de données (lecture seule), ajoutez une ou plusieurs instances de base de données de lecteur au cluster. Utilisez ensuite readPreference=secondaryPreferred pour gérer efficacement la charge.

Utiliser Amazon DocumentDB Profiler pour identifier les requêtes lentes

Utilisez Amazon DocumentDB Profiler pour consigner les requêtes lentes. Si une requête apparaît à plusieurs reprises dans les journaux des requêtes lentes, vous aurez peut-être besoin d'un index supplémentaire pour améliorer les performances.

Vérifiez les requêtes de longue durée qui incluent des étapes COLLSCAN dans leur plan d'exécution. Une étape COLLSCAN signifie que la requête doit lire tous les documents de la collection pour fournir une réponse à la requête.

Pour plus d'informations, consultez la section Profiler les requêtes à exécution lente dans Amazon DocumentDB (compatible avec MongoDB).

Créer une notification d'alerte avec CloudWatch

Créez une alerte CloudWatch qui vous avertit lorsque la métrique Utilisation du processeur dépasse un certain seuil.

Augmenter la classe de vos instances de base de données

S'il n'existe aucune autre possibilité d'ajuster des requêtes, augmentez la classe des instances du cluster pour gérer la charge de travail.

Remarque : l'augmentation verticale de la classe d'instance entraîne une augmentation des coûts. Pour plus d'informations, consultez la section Tarification d'Amazon DocumentDB (compatible avec MongoDB).

Informations connexes

Mise à l'échelle des clusters Amazon DocumentDB

Résolution des problèmes de performances et d'utilisation des ressources

Comment indexer sur Amazon DocumentDB (compatible avec MongoDB)

AWS OFFICIELA mis à jour il y a 8 mois