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

Extraire les requêtes et formes de requêtes les plus lentes depuis les données du profiler

MongoDBPerformances

Commande

// Recent slow operations (in the db where profiling is on; see set-profiling):
db.system.profile.find({ millis: { $gte: 100 } }, { ts: 1, ns: 1, op: 1, millis: 1, planSummary: 1, keysExamined: 1, docsExamined: 1, nreturned: 1, appName: 1 }).sort({ ts: -1 }).limit(20)
// Total time per query shape (those consuming the most time):
db.system.profile.aggregate([
  { $group: { _id: { ns: "$ns", plan: "$planSummary", shape: "$queryHash" }, n: { $sum: 1 }, totalMs: { $sum: "$millis" }, maxMs: { $max: "$millis" }, avgDocs: { $avg: "$docsExamined" } } },
  { $sort: { totalMs: -1 } },
  { $limit: 10 }
])
// Queries not using an index (COLLSCAN):
db.system.profile.find({ planSummary: "COLLSCAN" }, { ns: 1, millis: 1, command: 1 }).sort({ millis: -1 }).limit(10)

Ce que fait la commande

À partir des enregistrements de la collection system.profile, liste les opérations lentes récentes, le temps total par forme de requête (queryHash) et les requêtes COLLSCAN qui n'utilisent aucun index.

Quand l'utiliser

Sur une plainte de lenteur, pour trouver quelle requête consomme le temps du serveur et déterminer les besoins en index.

Attention

system.profile est une collection capped de 1 MB par défaut et est propre à chaque base ; sur un système chargé, les enregistrements tournent en quelques minutes, analysez donc pendant que le profiling est actif ou juste après. Le niveau de profiling 2 ou slowms 0 écrit chaque opération et ajoute une surcharge importante. Les enregistrements ne sont conservés que sur le membre où ils ont été exécutés et ne sont pas répliqués.

Ouvrir dans DBAtlas →

Voir aussi