Guide d'analyse des métriques de performance MongoDB avec mongotop et mongostat

Utilisez mongotop et mongostat pour repérer les collections chaudes, la pression sur les ressources, les pics de connexion et les schémas lents de MongoDB.

Guide d'analyse des métriques de performance MongoDB avec mongotop et mongostat

Les problèmes de performance MongoDB se manifestent souvent par des pages lentes, des écritures bloquées ou des pics soudains de connexions. mongotop et mongostat, installés avec MongoDB Database Tools, offrent une vue terminal rapide de ce que le serveur fait en temps réel.

Ce guide montre comment lire ces outils lors d'incidents courants, puis relier les résultats aux vérifications suivantes probables telles que les index, la forme des requêtes, le pooling de connexions et la pression disque.

Comprendre mongotop

mongotop fournit une vue en temps réel des opérations de lecture et d'écriture sur vos instances MongoDB. Il affiche le temps passé par chaque collection en opérations de lecture ou d'écriture sur un intervalle spécifié. Cela est particulièrement utile pour identifier les collections qui subissent le plus d'activité et pourraient être une source de dégradation des performances.

Métriques clés fournies par mongotop :

  • ns : L'espace de noms de la collection (base_de_données.collection).
  • total : Temps passé à lire et écrire dans l'espace de noms pendant l'intervalle d'échantillonnage.
  • read : Temps passé en activité de lecture pendant l'intervalle d'échantillonnage.
  • write : Temps passé en activité d'écriture pendant l'intervalle d'échantillonnage.

Comment utiliser mongotop :

Vous pouvez exécuter mongotop directement depuis votre terminal, à condition d'avoir les outils de base de données MongoDB installés et accessibles dans votre PATH. Par défaut, il se met à jour chaque seconde. Vous pouvez également spécifier un intervalle en secondes.

mongotop

Pour spécifier un intervalle de mise à jour (par exemple, toutes les 5 secondes) :

mongotop 5

Pour exécuter mongotop sur une instance MongoDB fonctionnant sur un hôte et un port différents :

mongotop --host <nom_hôte> --port <port>

Interprétation de la sortie de mongotop :

  • Temps write élevé sur une collection spécifique : La collection subit une activité d'écriture intense. Vérifiez le volume d'écriture, la croissance des documents, les index touchés par les écritures et si la charge de travail doit être partitionnée.
  • Temps read élevé : Vérifiez les plans de requête pour cette collection. Les index manquants, les grands ensembles de résultats et les analyses d'agrégation apparaissent souvent ici.
  • Collections avec un temps total constamment élevé : Ce sont vos collections les plus chaudes. Surveillez de près leurs index, leur ensemble de travail et leurs schémas de requêtes.

Comprendre mongostat

mongostat fournit un aperçu plus large en temps réel des performances et de l'utilisation des ressources d'une instance MongoDB. Il collecte et affiche diverses métriques sur l'état du serveur, y compris les opérations par seconde, le trafic réseau, les E/S disque et l'utilisation de la mémoire.

Métriques clés fournies par mongostat :

  • insert : Opérations par seconde pour les insertions.
  • query : Opérations par seconde pour les requêtes.
  • update : Opérations par seconde pour les mises à jour.
  • delete : Opérations par seconde pour les suppressions.
  • getmore : Opérations par seconde pour les opérations getmore (utilisées pour les curseurs).
  • command : Opérations par seconde pour les commandes.
  • dirty ou dirty % : Données du cache WiredTiger modifiées en mémoire mais pas encore écrites sur le disque. Le nom exact de la colonne dépend de MongoDB et des versions des outils.
  • used ou used % : Utilisation du cache WiredTiger. Le nom exact de la colonne dépend de MongoDB et des versions des outils.
  • conn : Nombre actuel de connexions.
  • networkIn : Trafic réseau reçu par le serveur (en octets).
  • networkOut : Trafic réseau envoyé par le serveur (en octets).
  • res : Taille de la mémoire résidente utilisée par le processus MongoDB (en Mo).
  • qr|qw : Nombre d'opérations de lecture et d'écriture en file d'attente, lorsque la colonne est disponible.
  • ar|aw : Nombre de clients de lecture et d'écriture actifs, lorsque la colonne est disponible.

Comment utiliser mongostat :

mongostat est également un utilitaire en ligne de commande. Similaire à mongotop, il se met à jour périodiquement, avec un intervalle par défaut de 5 secondes. Vous pouvez spécifier un intervalle différent et des détails de connexion.

mongostat

Pour spécifier un intervalle de mise à jour (par exemple, toutes les 2 secondes) :

mongostat 2

Pour se connecter à une instance MongoDB distante :

mongostat --host <nom_hôte> --port <port>

Interprétation de la sortie de mongostat :

  • Taux élevés de insert, query, update ou delete : Indique une charge opérationnelle lourde. Surveillez ces métriques avec d'autres pour comprendre si le système suit le rythme.
  • conn élevé : Un grand nombre de connexions peut solliciter les ressources du serveur. Enquêtez sur le pooling de connexions dans votre application si cela est anormalement élevé.
  • networkIn ou networkOut élevé : Suggère un transfert de données important. Cela peut être dû à de grandes requêtes, au trafic de réplication ou à de grands ensembles de résultats renvoyés.
  • res élevé : Le processus MongoDB consomme beaucoup de RAM. Assurez-vous que votre serveur dispose de suffisamment de mémoire et vérifiez les requêtes inefficaces ou les grands ensembles de données qui pourraient contribuer à une utilisation élevée de la mémoire.
  • qr|qw élevé : Indique que des lectures ou des écritures sont mises en file d'attente, ce qui pointe généralement vers une contention de ressources ou une charge de travail que le serveur ne peut pas traiter assez rapidement.
  • Valeurs dirty ou cache used élevées : Si la pression du cache WiredTiger reste élevée, votre ensemble de travail peut ne pas tenir confortablement en mémoire, ou les écritures sur le disque peuvent être en retard.
  • Requêtes lentes avec de faibles taux d'opérations : Utilisez le profileur, le journal des requêtes lentes ou explain() pour vérifier si les requêtes analysent trop de documents. La sortie moderne de mongostat n'expose pas de manière fiable un pourcentage unique de non-correspondance d'index pour les déploiements WiredTiger.

Cas d'utilisation pratiques et scénarios de dépannage

Scénario 1 : Performances d'application lentes

  1. Exécutez mongostat : Observez les taux de qr, aw, insert, query, update, delete. Si qr ou aw sont élevés, ou si les taux d'opérations sont élevés mais ne semblent pas se traiter rapidement, cela suggère un arriéré.
  2. Exécutez mongotop : Identifiez les collections qui subissent le plus de read ms et write ms. Une collection avec une activité d'écriture élevée pourrait ralentir d'autres opérations.
  3. Vérifiez les plans de requête : Pour les collections chaudes identifiées par mongotop, exécutez explain("executionStats") sur des requêtes lentes représentatives.
  4. Analysez networkIn/networkOut dans mongostat : S'ils sont anormalement élevés, recherchez de grands ensembles de résultats, de grandes agrégations ou du trafic de réplication.

Scénario 2 : Utilisation élevée du CPU ou de la mémoire

  1. Exécutez mongostat : Surveillez res (mémoire résidente) et l'utilisation du CPU (souvent observable via des outils système comme top ou htop, mais mongostat donne une perspective spécifique à la base de données). Un res élevé peut être corrélé au cache WiredTiger (used %).
  2. Examinez mongotop : Des temps de lecture/écriture élevés sur des collections spécifiques peuvent contribuer à une utilisation élevée du CPU.
  3. Regardez les taux d'opérations de mongostat : Si les insertions/mises à jour/suppressions sont extrêmement élevées, cela consomme naturellement du CPU.
  4. Enquêtez sur le cache WiredTiger et les métriques disque : Si le cache sale reste élevé alors que les écritures de l'application ralentissent, comparez la sortie MongoDB avec la latence du disque hôte et la saturation des E/S.

Scénario 3 : Retard de réplication

Bien que mongotop et mongostat ne mesurent pas directement le retard de réplication, ils sont cruciaux pour comprendre la cause du retard.

  1. Exécutez mongostat sur le primaire : Recherchez des qr ou aw élevés, des taux d'opérations d'écriture élevés, ou une utilisation élevée du CPU/mémoire. Si le primaire est surchargé, il ne peut pas écrire efficacement dans son oplog, ce qui entraîne un retard sur les secondaires.
  2. Exécutez mongostat sur le secondaire : Observez ses opérations de lecture/écriture. Si le secondaire est lent à appliquer les entrées de l'oplog, cela peut être dû à des ressources insuffisantes sur le secondaire ou à des requêtes/opérations inefficaces appliquées.

Conseils et meilleures pratiques

  • Exécutez les outils régulièrement : N'attendez pas que des problèmes de performance surviennent. Surveillez vos instances MongoDB de manière proactive.
  • Établissez des bases de référence : Comprenez à quoi ressemble la "normale" pour votre déploiement. Cela facilite la détection des écarts.
  • Combinez avec d'autres outils : mongotop et mongostat sont excellents pour des instantanés en temps réel. Pour une analyse historique, envisagez d'utiliser la surveillance des performances intégrée de MongoDB (par exemple, db.serverStatus(), db.stats()) ou des outils externes comme Prometheus avec MongoDB Exporter, ou les services de surveillance des fournisseurs de cloud.
  • Comprenez votre ensemble de travail : Connaître la taille de votre ensemble de données actif est crucial pour la gestion de la mémoire et la compréhension de l'efficacité du cache WiredTiger.
  • Concentrez-vous sur les plans de requête : Utilisez explain("executionStats") et le journal des requêtes lentes pour confirmer si des index manquants ou inefficaces provoquent des analyses.
  • Envisagez le pooling de connexions : Des nombres élevés de conn peuvent souvent être atténués en mettant en œuvre un pooling de connexions approprié dans votre couche applicative.

À retenir

Utilisez mongostat pour comprendre la pression au niveau du serveur et mongotop pour trouver les collections qui reçoivent le plus d'attention en lecture ou en écriture. Lorsque l'un ou l'autre outil pointe vers une zone chaude, confirmez la cause avec les plans de requête, les journaux de requêtes lentes, les métriques de l'hôte et le comportement de connexion de l'application avant de modifier les index ou de mettre à l'échelle le déploiement.