Inspecter un plan de requête avec les statistiques d'exécution réelles (explain executionStats)
MongoDBPerformancesCommande
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é.
Voir aussi
- Extraire les requêtes et formes de requêtes les plus lentes depuis les données du profiler
- Trouver les index inutilisés et les masquer avant de les supprimer (hideIndex)
- Compter les connexions par application et client (diagnostic de tempête de connexions)
- Mesurer la pression sur le cache WiredTiger (remplissage, taux de pages sales, éviction par l'application)