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
totalconstamment é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,updateoudelete: 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é.networkInounetworkOuté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
dirtyou cacheusedé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 demongostatn'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
- Exécutez
mongostat: Observez les taux deqr,aw,insert,query,update,delete. Siqrouawsont é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é. - Exécutez
mongotop: Identifiez les collections qui subissent le plus deread msetwrite ms. Une collection avec une activité d'écriture élevée pourrait ralentir d'autres opérations. - Vérifiez les plans de requête : Pour les collections chaudes identifiées par
mongotop, exécutezexplain("executionStats")sur des requêtes lentes représentatives. - Analysez
networkIn/networkOutdansmongostat: 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
- Exécutez
mongostat: Surveillezres(mémoire résidente) et l'utilisation du CPU (souvent observable via des outils système commetopouhtop, maismongostatdonne une perspective spécifique à la base de données). Unresélevé peut être corrélé au cache WiredTiger (used %). - Examinez
mongotop: Des temps de lecture/écriture élevés sur des collections spécifiques peuvent contribuer à une utilisation élevée du CPU. - Regardez les taux d'opérations de
mongostat: Si les insertions/mises à jour/suppressions sont extrêmement élevées, cela consomme naturellement du CPU. - 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.
- Exécutez
mongostatsur le primaire : Recherchez desqrouawé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. - Exécutez
mongostatsur 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 :
mongotopetmongostatsont 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
connpeuvent 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.