DBAtlas · Atlas d'exploitation des bases de données

Inspecter un plan de requête avec les statistiques d'exécution réelles (explain executionStats)

MongoDBPerformances

Commande

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 } } }])

Ce que fait la commande

Exécute la requête et affiche le plan gagnant (IXSCAN/COLLSCAN, étape SORT), le nombre de documents renvoyés, les clés d'index et documents examinés, et le temps pris.

Quand l'utiliser

Pour analyser une requête qui paraît lente dans le profiler ou le log, et pour vérifier qu'un nouvel index est réellement utilisé.

Attention

executionStats exécute réellement la requête ; faire un explain d'une requête lourde en pointe ajoute aussi de la charge. Pour les commandes d'écriture (update/delete/findAndModify), explain ne modifie pas les données mais exécute le plan. Un ratio totalDocsExamined/nReturned élevé ou une étape SORT en mémoire dans le plan signifie que l'index n'est pas adapté.

Ouvrir dans DBAtlas →

Voir aussi