Abfrageplan mit echten Ausführungsstatistiken untersuchen (explain executionStats)
MongoDBPerformanceBefehl
db.musteri.find({ sehir: "Ankara", durum: "aktif" }).sort({ kayitTarihi: -1 }).explain("executionStats")
// Summary: winning plan, returned documents, examined keys/documents and time
const e = db.musteri.find({ sehir: "Ankara", durum: "aktif" }).sort({ kayitTarihi: -1 }).explain("executionStats");
({ plan: e.queryPlanner.winningPlan, n: e.executionStats.nReturned, keys: e.executionStats.totalKeysExamined, docs: e.executionStats.totalDocsExamined, ms: e.executionStats.executionTimeMillis })
// For an aggregation:
db.musteri.explain("executionStats").aggregate([{ $match: { sehir: "Ankara" } }, { $group: { _id: "$durum", n: { $sum: 1 } } }])Was es tut
Führt die Abfrage aus und zeigt den gewählten Plan (IXSCAN/COLLSCAN, SORT-Stage), die Anzahl der zurückgegebenen Dokumente, der untersuchten Indexschlüssel und Dokumente sowie die benötigte Zeit.
Wann einsetzen
Beim Analysieren einer Abfrage, die im Profiler oder Log langsam erscheint, und um zu prüfen, ob ein neuer Index tatsächlich genutzt wird.
Vorsicht
executionStats führt die Abfrage wirklich aus; auch ein explain einer schweren Abfrage zur Spitzenzeit erzeugt Last. Bei Schreibbefehlen (update/delete/findAndModify) ändert explain keine Daten, führt aber den Plan aus. Ein hohes Verhältnis totalDocsExamined/nReturned oder eine In-Memory-SORT-Stage im Plan bedeutet, dass der Index nicht passt.
Verwandte Einträge
- Die langsamsten Abfragen und Query Shapes aus Profiler-Daten ermitteln
- Ungenutzte Indizes finden und vor dem Löschen verstecken (hideIndex)
- Verbindungen nach Anwendung und Client zählen (Diagnose eines Connection Storms)
- Druck auf den WiredTiger-Cache messen (Füllgrad, Dirty-Anteil, Eviction durch Anwendungs-Threads)