40 Erweiterte Analysewerkzeuge

Neben den oben genannten grundlegenden Methoden zur Queryanalyse bietet MongoDB zusätzliche fortgeschrittene Werkzeuge und Techniken, um tiefergehende Einblicke in Abfrageleistung und Datenbankverhalten zu erhalten.

40.1 Index-Analyse

Mit explain() können Sie die Effizienz eines Indexes bei bestimmten Abfragen überprüfen:

db.meineSammlung.find({ name: "Max" }).hint({ name: 1 }).explain("executionStats");

Vergleichen Sie diese Werte mit denen eines Collection-Scans (COLLSCAN), um die Indexeffizienz zu bewerten.

40.2 Queryable Profiler

MongoDB bietet ab Version 4.2 die Möglichkeit, Profildaten über Aggregationsabfragen direkt aus der system.profile-Collection abzurufen.

Beispiel: Identifizieren Sie die langsamsten Abfragen:

db.system.profile.aggregate([
    { $match: { millis: { $gt: 100 } } },
    { $sort: { millis: -1 } },
    { $limit: 5 }
]);

40.3 Performance Benchmarks

MongoDB unterstützt benchRun, eine Methode, um bestimmte Abfragen und Schreibvorgänge in einer Testumgebung zu simulieren.

Beispiel: Testen Sie eine Abfrage mit mehreren Threads und Wiederholungen:

benchRun({
    ops: [
        { op: "find", ns: "meineDatenbank.meineSammlung", query: { typ: "KI" } }
    ],
    parallel: 5,
    seconds: 10
});

Dies liefert Metriken wie Durchsatz und Latenz, die für die Optimierung nützlich sind.

40.4 Aggregation Performance Analyzer

Für Aggregationsabfragen können Sie das explain()-Feature verwenden, um die Effizienz einzelner Pipeline-Phasen zu analysieren.

Beispiel: Analyse einer komplexen Aggregationsabfrage:

db.meineSammlung.aggregate([
    { $match: { typ: "KI" } },
    { $group: { _id: "$typ", count: { $sum: 1 } } }
]).explain("executionStats");

40.5 Abfragen optimieren mit Covering Indexes

Ein “Covering Index” ist ein Index, der alle angeforderten Felder einer Abfrage abdeckt, sodass kein Zugriff auf die eigentlichen Dokumente erforderlich ist.

Beispiel: Abfrage mit Covering Index:

db.meineSammlung.createIndex({ name: 1, typ: 1 });
db.meineSammlung.find({ name: "Max" }, { name: 1, typ: 1, _id: 0 }).explain("executionStats");

Das stage: "IXSCAN" im explain()-Output zeigt, dass die Abfrage nur den Index verwendet.


40.6 Tipps zur Queryanalyse

  1. Regelmäßig Slow Log prüfen: Identifizieren Sie Engpässe und Abfragen, die optimiert werden müssen.
  2. Explizite Limits setzen: Begrenzen Sie die Anzahl der zurückgegebenen Dokumente, um Speicher- und Netzwerkressourcen zu schonen.
  3. Verwenden Sie Projectionen: Ziehen Sie nur die Felder ab, die Sie benötigen, um unnötige Datenverarbeitung zu vermeiden.
  4. Indexreihenfolge beachten: Bei zusammengesetzten Indizes sollte die Reihenfolge der Felder den häufigsten Abfragekriterien entsprechen.
  5. Arbeiten Sie mit den neuesten MongoDB-Versionen: Neuere Versionen bieten verbesserte Tools und Algorithmen zur Abfrageanalyse.

MongoDB stellt leistungsstarke Tools zur Verfügung, die es ermöglichen, komplexe Abfragen zu analysieren, Engpässe zu identifizieren und Optimierungen effizient umzusetzen. Durch die Kombination von explain(), Indexanalyse, Benchmarks und Profiler können Sie Ihre Abfragen und die gesamte Datenbankleistung gezielt verbessern.