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- oder delete-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 networkIn oder networkOut: 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 moderne mongostat-Ausgabe zeigt zuverlässig keinen einzelnen Index-Fehlerprozentsatz für WiredTiger-Bereitstellungen an.

Praktische Anwendungsfälle und Fehlerbehebungsszenarien

Szenario 1: Langsame Anwendungsleistung

  1. Führen Sie mongostat aus: Beobachten Sie qr, aw, insert, query, update, delete-Raten. Wenn qr oder aw hoch sind oder die Operationsraten hoch sind, aber nicht schnell verarbeitet zu werden scheinen, deutet dies auf einen Rückstau hin.
  2. Führen Sie mongotop aus: Identifizieren Sie, welche Collections die meiste read ms und write ms aufweisen. Eine Collection mit hoher Schreibaktivität könnte andere Operationen verlangsamen.
  3. Überprüfen Sie die Query-Pläne: Führen Sie für die von mongotop identifizierten heißen Collections explain("executionStats") für repräsentative langsame Abfragen aus.
  4. Analysieren Sie networkIn/networkOut in mongostat: Wenn diese ungewöhnlich hoch sind, suchen Sie nach großen Ergebnismengen, großen Aggregationen oder Replikationsverkehr.

Szenario 2: Hohe CPU- oder Speichernutzung

  1. Führen Sie mongostat aus: Überwachen Sie res (residenter Speicher) und die CPU-Auslastung (oft mit Systemtools wie top oder htop beobachtbar, aber mongostat bietet eine DB-spezifische Perspektive). Hohe res könnte mit dem WiredTiger-Cache (used %) korrelieren.
  2. Untersuchen Sie mongotop: Hohe Lese-/Schreib-Millisekunden auf bestimmten Collections können zu hoher CPU-Auslastung beitragen.
  3. Betrachten Sie die Operationsraten von mongostat: Wenn Einfügungen/Aktualisierungen/Löschungen extrem hoch sind, verbraucht dies natürlich CPU.
  4. 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.

  1. Führen Sie mongostat auf dem Primary aus: Achten Sie auf hohe qr oder aw, 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.
  2. Führen Sie mongostat auf 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: mongotop und mongostat eignen 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.