Ein Leitfaden zur Analyse von MongoDB-Leistungsmetriken mit mongotop und mongostat
Nutzen Sie mongotop und mongostat, um heiße Collections, Ressourcendruck, Verbindungsspitzen und langsame MongoDB-Muster zu erkennen.
Ein Leitfaden zur Analyse von MongoDB-Leistungsmetriken mit mongotop und mongostat
MongoDB-Leistungsprobleme zeigen sich oft als langsame Seiten, gestaute Schreibvorgänge oder plötzliche Verbindungsspitzen. mongotop und mongostat, die mit den MongoDB Database Tools installiert werden, bieten eine schnelle Terminalansicht des aktuellen Serverzustands.
Dieser Leitfaden zeigt, wie man diese Tools bei häufigen Vorfällen liest und die Ausgabe mit wahrscheinlichen nächsten Überprüfungen wie Indizes, Query-Form, Connection Pooling und Festplattenauslastung verknüpft.
mongotop verstehen
mongotop bietet eine Echtzeitansicht der Lese- und Schreiboperationen auf Ihren MongoDB-Instanzen. Es zeigt die Zeit an, die jede Collection in einem bestimmten Intervall für Lese- oder Schreiboperationen benötigt. Dies ist besonders nützlich, um zu identifizieren, welche Collections die meiste Aktivität aufweisen und möglicherweise eine Quelle für Leistungseinbußen darstellen.
Wichtige Metriken von mongotop:
- ns: Der Namespace der Collection (Datenbank.Collection).
- total: Zeit, die während des Abtastintervalls für Lese- und Schreibvorgänge im Namespace aufgewendet wurde.
- read: Zeit, die während des Abtastintervalls für Leseaktivitäten aufgewendet wurde.
- write: Zeit, die während des Abtastintervalls für Schreibaktivitäten aufgewendet wurde.
Verwendung von mongotop:
Sie können mongotop direkt von Ihrem Terminal aus ausführen, vorausgesetzt, die MongoDB-Datenbanktools sind installiert und im PATH verfügbar. Standardmäßig wird jede Sekunde aktualisiert. Sie können auch ein Intervall in Sekunden angeben.
mongotop
Um ein Aktualisierungsintervall anzugeben (z. B. alle 5 Sekunden):
mongotop 5
Um mongotop gegen eine MongoDB-Instanz auf einem anderen Host und Port auszuführen:
mongotop --host <hostname> --port <port>
Interpretation der mongotop-Ausgabe:
- Hohe
write-Zeit auf einer bestimmten Collection: Die Collection hat starke Schreibaktivitäten. Überprüfen Sie das Schreibvolumen, das Dokumentenwachstum, die von Schreibvorgängen betroffenen Indizes und ob die Arbeitslast shardiert werden sollte. - Hohe
read-Zeit: Überprüfen Sie die Query-Pläne für diese Collection. Fehlende Indizes, große Ergebnismengen und Aggregations-Scans zeigen sich hier oft. - Collections mit konstant hoher
total-Zeit: Dies sind Ihre heißesten Collections. Überwachen Sie deren Indizes, Working Set und Query-Muster genau.
mongostat verstehen
mongostat bietet einen breiteren, Echtzeit-Überblick über die Leistung und Ressourcennutzung einer MongoDB-Instanz. Es sammelt und zeigt eine Vielzahl von Metriken zum Serverzustand an, darunter Operationen pro Sekunde, Netzwerkverkehr, Festplatten-I/O und Speichernutzung.
Wichtige Metriken von mongostat:
- insert: Operationen pro Sekunde für Einfügungen.
- query: Operationen pro Sekunde für Abfragen.
- update: Operationen pro Sekunde für Aktualisierungen.
- delete: Operationen pro Sekunde für Löschungen.
- getmore: Operationen pro Sekunde für getmore-Operationen (für Cursor).
- command: Operationen pro Sekunde für Befehle.
- dirty oder dirty %: Im WiredTiger-Cache geänderte Daten im Arbeitsspeicher, die noch nicht auf die Festplatte geschrieben wurden. Der genaue Spaltenname hängt von der MongoDB- und Tool-Version ab.
- used oder used %: WiredTiger-Cache-Nutzung. Der genaue Spaltenname hängt von der MongoDB- und Tool-Version ab.
- conn: Aktuelle Anzahl der Verbindungen.
- networkIn: Vom Server empfangener Netzwerkverkehr (in Bytes).
- networkOut: Vom Server gesendeter Netzwerkverkehr (in Bytes).
- res: Größe des residenten Speichers, der vom MongoDB-Prozess verwendet wird (in MB).
- qr|qw: Anzahl der in der Warteschlange befindlichen Lese- und Schreiboperationen, wenn die Spalte verfügbar ist.
- ar|aw: Anzahl der aktiven Lese- und Schreib-Clients, wenn die Spalte verfügbar ist.
Verwendung von mongostat:
mongostat ist ebenfalls ein Befehlszeilenprogramm. Ähnlich wie mongotop aktualisiert es sich periodisch, mit einem Standardintervall von 5 Sekunden. Sie können ein anderes Intervall und Verbindungsdetails angeben.
mongostat
Um ein Aktualisierungsintervall anzugeben (z. B. alle 2 Sekunden):
mongostat 2
Um eine Verbindung zu einer entfernten MongoDB-Instanz herzustellen:
mongostat --host <hostname> --port <port>
Interpretation der mongostat-Ausgabe:
- Hohe
insert-,query-,update- oderdelete-Raten: Zeigt eine hohe Betriebslast an. Überwachen Sie diese zusammen mit anderen Metriken, um zu verstehen, ob das System mithalten kann. - Hohe
conn: Eine große Anzahl von Verbindungen kann Serverressourcen belasten. Untersuchen Sie das Connection Pooling in Ihrer Anwendung, wenn dies unerwartet hoch ist. - Hohe
networkInodernetworkOut: Deutet auf erheblichen Datentransfer hin. Dies kann auf große Abfragen, Replikationsverkehr oder große zurückgegebene Ergebnismengen zurückzuführen sein. - Hohe
res: Der MongoDB-Prozess verbraucht viel RAM. Stellen Sie sicher, dass Ihr Server über ausreichend Arbeitsspeicher verfügt, und überprüfen Sie ineffiziente Abfragen oder große Datensätze, die zu hohem Speicherverbrauch beitragen könnten. - Hohe
qr|qw: Zeigt an, dass Lese- oder Schreibvorgänge in die Warteschlange gestellt werden, was normalerweise auf Ressourcenkonflikte oder eine Arbeitslast hinweist, die der Server nicht schnell genug verarbeiten kann. - Hohe
dirty- oder Cache-used-Werte: Wenn der WiredTiger-Cache-Druck hoch bleibt, passt Ihr Working Set möglicherweise nicht bequem in den Arbeitsspeicher, oder die Festplattenschreibvorgänge hinken hinterher. - Langsame Abfragen mit niedrigen Operationsraten: Verwenden Sie den Profiler, das Slow Query Log oder
explain(), um zu überprüfen, ob Abfragen zu viele Dokumente scannen. Die modernemongostat-Ausgabe zeigt zuverlässig keinen einzelnen Index-Fehlerprozentsatz für WiredTiger-Bereitstellungen an.
Praktische Anwendungsfälle und Fehlerbehebungsszenarien
Szenario 1: Langsame Anwendungsleistung
- Führen Sie
mongostataus: Beobachten Sieqr,aw,insert,query,update,delete-Raten. Wennqroderawhoch sind oder die Operationsraten hoch sind, aber nicht schnell verarbeitet zu werden scheinen, deutet dies auf einen Rückstau hin. - Führen Sie
mongotopaus: Identifizieren Sie, welche Collections die meisteread msundwrite msaufweisen. Eine Collection mit hoher Schreibaktivität könnte andere Operationen verlangsamen. - Überprüfen Sie die Query-Pläne: Führen Sie für die von
mongotopidentifizierten heißen Collectionsexplain("executionStats")für repräsentative langsame Abfragen aus. - Analysieren Sie
networkIn/networkOutinmongostat: Wenn diese ungewöhnlich hoch sind, suchen Sie nach großen Ergebnismengen, großen Aggregationen oder Replikationsverkehr.
Szenario 2: Hohe CPU- oder Speichernutzung
- Führen Sie
mongostataus: Überwachen Sieres(residenter Speicher) und die CPU-Auslastung (oft mit Systemtools wietopoderhtopbeobachtbar, abermongostatbietet eine DB-spezifische Perspektive). Hohereskönnte mit dem WiredTiger-Cache (used %) korrelieren. - Untersuchen Sie
mongotop: Hohe Lese-/Schreib-Millisekunden auf bestimmten Collections können zu hoher CPU-Auslastung beitragen. - Betrachten Sie die Operationsraten von
mongostat: Wenn Einfügungen/Aktualisierungen/Löschungen extrem hoch sind, verbraucht dies natürlich CPU. - Untersuchen Sie WiredTiger-Cache- und Festplattenmetriken: Wenn der Dirty-Cache hoch bleibt, während die Anwendungsschreibvorgänge langsamer werden, vergleichen Sie die MongoDB-Ausgabe mit der Host-Festplattenlatenz und der I/O-Sättigung.
Szenario 3: Replikationsverzögerung
Obwohl mongotop und mongostat die Replikationsverzögerung nicht direkt messen, sind sie entscheidend für das Verständnis der Ursache der Verzögerung.
- Führen Sie
mongostatauf dem Primary aus: Achten Sie auf hoheqroderaw, hohe Schreiboperationsraten oder hohe CPU-/Speichernutzung. Wenn der Primary überlastet ist, kann er nicht effizient in sein Oplog schreiben, was zu Verzögerungen auf den Secondaries führt. - Führen Sie
mongostatauf dem Secondary aus: Beobachten Sie dessen Lese-/Schreiboperationen. Wenn der Secondary langsam ist, Oplog-Einträge anzuwenden, könnte dies an unzureichenden Ressourcen auf dem Secondary oder ineffizienten angewendeten Abfragen/Operationen liegen.
Tipps und Best Practices
- Führen Sie die Tools regelmäßig aus: Warten Sie nicht, bis Leistungsprobleme auftreten. Überwachen Sie Ihre MongoDB-Instanzen proaktiv.
- Legen Sie Basiswerte fest: Verstehen Sie, wie "normal" für Ihre Bereitstellung aussieht. Dies erleichtert das Erkennen von Abweichungen.
- Kombinieren Sie mit anderen Tools:
mongotopundmongostateignen sich hervorragend für Echtzeit-Schnappschüsse. Für historische Analysen sollten Sie die integrierte Leistungsüberwachung von MongoDB (z. B.db.serverStatus(),db.stats()) oder externe Tools wie Prometheus mit dem MongoDB Exporter oder Überwachungsdienste von Cloud-Anbietern in Betracht ziehen. - Verstehen Sie Ihr Working Set: Die Kenntnis der Größe Ihres aktiven Datensatzes ist entscheidend für das Speichermanagement und das Verständnis der Effektivität des WiredTiger-Caches.
- Konzentrieren Sie sich auf Query-Pläne: Verwenden Sie
explain("executionStats")und das Slow Query Log, um zu bestätigen, ob fehlende oder ineffiziente Indizes Scans verursachen. - Erwägen Sie Connection Pooling: Hohe
conn-Zahlen können oft durch die Implementierung eines ordnungsgemäßen Connection Poolings in Ihrer Anwendungsschicht gemildert werden.
Fazit
Verwenden Sie mongostat, um den Druck auf Serverebene zu verstehen, und mongotop, um die Collections zu finden, die die meiste Lese- oder Schreibaufmerksamkeit erhalten. Wenn eines der Tools auf einen heißen Bereich hinweist, bestätigen Sie die Ursache mit Query-Plänen, Slow Query Logs, Host-Metriken und dem Verbindungsverhalten der Anwendung, bevor Sie Indizes ändern oder die Bereitstellung skalieren.