Guide d'analyse des métriques de performance de MongoDB avec mongotop et mongostat
MongoDB, une base de données documentaire NoSQL de premier plan, offre de robustes capacités de performance. Cependant, comme tout système complexe, elle peut rencontrer des goulots d'étranglement de performance qui impactent la réactivité de l'application et l'expérience utilisateur. Identifier et résoudre ces problèmes est crucial pour maintenir une base de données saine et efficace. Heureusement, MongoDB fournit des utilitaires en ligne de commande intégrés conçus pour la surveillance en temps réel : mongotop et mongostat. Ces outils sont précieux pour évaluer rapidement l'utilisation des ressources, comprendre l'activité de lecture et d'écriture, et identifier les anomalies de performance.
Ce guide vous guidera à travers l'application pratique de mongotop et mongostat. Nous explorerons leurs fonctionnalités principales, leurs cas d'utilisation courants, et comment interpréter leurs sorties pour diagnostiquer et dépanner des problèmes de performance tels que les requêtes lentes, la consommation élevée de ressources, et d'autres problèmes courants de MongoDB. En maîtrisant ces outils, vous pouvez obtenir des informations plus approfondies sur votre déploiement MongoDB et assurer des performances optimales.
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 sur des opérations de lecture ou d'écriture sur un intervalle spécifié. Ceci est particulièrement utile pour identifier quelles collections subissent le plus d'activité et pourraient potentiellement être une source de dégradation des performances.
Métriques clés fournies par mongotop :
- ns : Le namespace de la collection (base de données.collection).
- total ms : Le temps total en millisecondes passé sur les opérations pour ce namespace depuis le démarrage de l'outil.
- read ms : Le temps total en millisecondes passé sur les opérations de lecture.
- write ms : Le temps total en millisecondes passé sur les opérations d'écriture.
- %total : Le pourcentage du temps total passé sur les opérations pour ce namespace.
- %read : Le pourcentage du temps total d'opération passé sur les lectures.
- %write : Le pourcentage du temps total d'opération passé sur les écritures.
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 <hostname> --port <port>
Interprétation de la sortie de mongotop :
write msou%writeélevé sur une collection spécifique : Cela indique que la collection subit une activité d'écriture intensive. Si votre application rencontre des lenteurs, cette collection pourrait être un goulot d'étranglement. Envisagez d'optimiser les opérations d'écriture, l'indexation, ou potentiellement le sharding si le débit d'écriture est une préoccupation majeure.read msou%readélevé : Similaire aux écritures, une activité de lecture élevée sur une collection mérite une investigation. Assurez-vous d'avoir une indexation appropriée pour accélérer les opérations de lecture. Les grands ensembles de résultats issus de requêtes non optimisées peuvent également entraîner des temps de lecture élevés.- Collections avec un
total msconstamment élevé : Ce sont vos collections les plus activement utilisées. Il est essentiel de surveiller étroitement leurs performances et de s'assurer qu'elles sont bien indexées et interrogées efficacement.
Comprendre mongostat
mongostat fournit un aperçu plus large et en temps réel de la performance et de l'utilisation des ressources d'une instance MongoDB. Il collecte et affiche une variété de 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 % : Pourcentage de pages modifiées en mémoire.
- used % : Pourcentage de cache wiredTiger utilisé.
- 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|aw : Profondeur de la file d'attente pour les opérations de lecture et d'écriture.
- dirty : Nombre d'octets de données modifiés mais pas encore écrits sur le disque.
- used : Nombre d'octets de données dans le cache wiredTiger.
- flushed : Nombre d'octets vidés du cache wiredTiger vers le disque.
- idx miss % : Pourcentage de misses d'index.
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 et des détails de connexion différents.
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 <hostname> --port <port>
Interprétation de la sortie de mongostat :
- Taux élevés d'
insert,query,update, oudelete: 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 ce nombre 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.qrouawélevé : Indique que les opérations de lecture ou d'écriture sont mises en file d'attente, ce qui signifie que la base de données peine à répondre à la demande. C'est un indicateur fort d'un goulot d'étranglement de performance.dirty %ouused %élevé (cache wiredTiger) : Si le cache wiredTiger est constamment proche de 100% d'utilisation, cela peut indiquer que votre ensemble de travail dépasse la RAM disponible, entraînant plus d'activité disque. Envisagez d'augmenter la RAM ou d'optimiser les modèles d'accès aux données.idx miss %élevé : Un pourcentage élevé de misses d'index signifie que les requêtes effectuent probablement des scans complets de collection, ce qui est très inefficace. C'est une métrique critique indiquant des index manquants ou mal conçus.
Cas d'utilisation pratiques et scénarios de dépannage
Scénario 1 : Performance lente de l'application
- Exécuter
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 traités rapidement, cela suggère une accumulation. - Exécuter
mongotop: Identifiez quelles collections subissent le plus deread msetwrite ms. Une collection avec une activité d'écriture élevée pourrait ralentir d'autres opérations. - Vérifier
idx miss %dansmongostat: S'il est élevé, concentrez-vous sur l'indexation pour les collections identifiées parmongotop. - Analyser
networkIn/networkOutdansmongostat: S'ils sont anormalement élevés, cela pourrait indiquer des transferts de données importants, potentiellement dus à des requêtes non indexées renvoyant de nombreux documents ou à de grandes agrégations.
Scénario 2 : Utilisation élevée du CPU ou de la mémoire
- Exécuter
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 DB). Unresélevé peut être corrélé au cache wiredTiger (used %). - Examiner
mongotop: Desread ms/write msélevés sur des collections spécifiques peuvent contribuer à une utilisation élevée du CPU. - Regarder les taux d'opérations de
mongostat: Si les insertions/mises à jour/suppressions sont extrêmement élevées, cela consomme naturellement du CPU. - Investiguer
dirtyetflusheddansmongostat: Sidirtyaugmente constamment etflushedest faible, cela pourrait indiquer que les E/S disque sont un goulot d'étranglement, empêchant les écritures de se valider assez rapidement, entraînant une pression sur la mémoire.
Scénario 3 : Décalage de réplication
Bien que mongotop et mongostat ne mesurent pas directement le décalage de réplication, ils sont essentiels pour comprendre la cause du décalage.
- Exécuter
mongostatsur le primaire : Recherchez unqrouawélevé, des taux d'opérations d'écriture élevés, ou une utilisation CPU/mémoire élevée. Si le primaire est surchargé, il ne peut pas écrire efficacement dans son oplog, entraînant un décalage sur les secondaires. - Exécuter
mongostatsur le secondaire : Observez ses opérations de lecture/écriture. Si le secondaire est lent à appliquer les entrées de l'oplog, cela pourrait être dû à des ressources insuffisantes sur le secondaire ou à des requêtes/opérations inefficaces appliquées.
Conseils et meilleures pratiques
- Exécuter les outils régulièrement : N'attendez pas que des problèmes de performance surviennent. Surveillez vos instances MongoDB de manière proactive.
- Établir des références : Comprenez ce que signifie « normal » pour votre déploiement. Cela facilite la détection des écarts.
- Combiner avec d'autres outils :
mongotopetmongostatsont excellents pour les instantanés en temps réel. Pour l'analyse historique, envisagez d'utiliser la surveillance de performance intégrée de MongoDB (par exemple,db.serverStatus(),db.stats()) ou des outils externes tels que Prometheus avec le MongoDB Exporter, ou les services de surveillance des fournisseurs de cloud. - Comprendre votre ensemble de travail (working set) : 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.
- Se concentrer sur les index : La métrique
idx miss %dansmongostatest un fort indicateur que les index manquants ou inefficaces sont une cause principale des requêtes lentes. - Envisager le pooling de connexions : Des nombres élevés de
connpeuvent souvent être atténués en implémentant un pooling de connexions approprié dans votre couche applicative.
Conclusion
mongotop et mongostat sont des outils en ligne de commande indispensables pour tout administrateur ou développeur MongoDB. Ils fournissent des informations immédiates et en temps réel sur l'état opérationnel et la consommation des ressources de vos instances MongoDB. En comprenant les métriques qu'ils exposent et en apprenant à interpréter leurs sorties dans le contexte de la charge de travail de votre application, vous pouvez diagnostiquer rapidement les goulots d'étranglement de performance, identifier la contention de ressources et prendre des mesures ciblées pour optimiser votre déploiement MongoDB. L'utilisation régulière de ces outils, combinée à une solide compréhension du comportement de votre base de données, conduira à des applications plus stables, performantes et fiables.