Le profileur de base de données et le journal des requêtes lentes
Les apprenants activeront le profileur, définiront un seuil slowms et interrogeront system.profile pour trouver les opérations les plus coûteuses.
Le profileur de base de données et le journal des requêtes lentes est une leçon MongoDB Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MongoDB Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MongoDB Academy comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Why Profiling Matters
MongoDB can run thousands of queries per second, but a handful of slow queries can drag down an entire application. The database profiler and the slow query log are your primary tools for finding these expensive operations. They record query execution details — duration, documents examined, index usage — so you can identify and fix bottlenecks before users feel them.
Profiler Levels: 0, 1, and 2
The profiler has three levels: Level 0 — off, nothing is recorded. Level 1 — records operations that take longer than the slowms threshold (default 100 ms). This is the recommended production setting. Level 2 — records every operation regardless of duration. Level 2 is useful during debugging but creates too much write overhead for sustained production use.
// Enable level 1 profiling with 50ms threshold
db.setProfilingLevel(1, { slowms: 50 })
// Enable level 2 (capture everything)
db.setProfilingLevel(2)
// Turn profiling off
db.setProfilingLevel(0)The system.profile Collection
Profiled operations are written to the system.profile capped collection in each database. Each document in this collection represents one operation and contains: op (operation type), ns (namespace), command (the query or update), millis (duration), keysExamined, docsExamined, nreturned, and the execStats tree.
// Find the 5 slowest operations in the last hour
db.system.profile.find({
ts: { $gt: new Date(Date.now() - 3600000) }
}).sort({ millis: -1 }).limit(5).pretty()Key Fields in a Profile Document
The most diagnostic fields in a profile entry are: millis — total elapsed time. docsExamined — how many documents MongoDB read to satisfy the query. keysExamined — index entries scanned. nreturned — how many documents were returned. A healthy query has docsExamined / nreturned close to 1; a ratio of 1000:1 suggests a missing or inefficient index.
// Inspect ratio of docsExamined to nreturned
db.system.profile.find({},{
millis: 1, docsExamined: 1, nreturned: 1, command: 1
}).sort({ millis: -1 }).limit(10)
// If docsExamined >> nreturned, you need a better indexThe slowms Threshold
slowms is the cutoff in milliseconds for level 1 profiling. Only operations taking longer than this value are recorded. The default is 100 ms; you can lower it to 20–50 ms to catch more operations during an investigation, then raise it back to 100 ms (or higher) in production to reduce overhead. The setting is per-database and is not persisted across restarts unless set in mongod.conf.
// Set via mongod.conf (persists across restarts)
// operationProfiling:
// mode: slowOp
// slowOpThresholdMs: 100
// Or dynamically at runtime (applies until restart)
db.adminCommand({ profile: 1, slowms: 20 })Reading the Slow Query Log
Even with the profiler off, MongoDB writes slow operations to its log file. Each slow query log entry includes the operation type, namespace, duration, query shape, and plan summary. Log lines with COLLSCAN in the planSummary field are guaranteed to be missing an index. Log messages begin with Slow query and appear at log verbosity level 0.
// In the mongod log (or Atlas Log viewer), look for lines like:
// 2025-01-15T10:23:45 COMMAND mydb.orders command: find { filter: { status: 'pending' } }
// planSummary: COLLSCAN
// keysExamined: 0 docsExamined: 150000 nreturned: 23
// protocol: op_msg 1250msAtlas Performance Advisor
MongoDB Atlas includes the Performance Advisor, which automatically analyzes your slow query logs and recommends indexes. It groups similar queries by their query shape (filter structure without values), shows the average execution time, and generates the exact createIndex command you need. It is the fastest way to identify missing indexes in production without manually parsing logs.
Querying system.profile Effectively
You can filter system.profile by operation type, namespace, or any field. Common analysis patterns: find all collection scans, find all slow aggregations, and find all operations on a specific collection. Sort by millis descending to see the worst offenders first.
// Find all collection scans recorded by the profiler
db.system.profile.find({
'execStats.stage': 'COLLSCAN'
}).sort({ millis: -1 })
// Find slow ops on a specific collection
db.system.profile.find({
ns: 'mydb.orders',
millis: { $gt: 200 }
}).sort({ millis: -1 })Profiler Performance Overhead
Each profile entry is a write to the capped system.profile collection, which adds a small but measurable overhead. Level 1 (slow op only) is safe for most production workloads. Level 2 (all ops) can increase latency by 5–20% on busy clusters and should only be run for short debugging sessions. Always return to level 0 or 1 after a profiling session.
// Check current profiling level and threshold
db.getProfilingStatus()
// { was: 1, slowms: 100, sampleRate: 1 }currentOp: Catching Runaway Queries Live
db.currentOp() shows all operations currently executing on the server — not just slow ones that already finished. Use it to catch long-running queries in real time, identify locks, and kill runaway operations with db.killOp(opid). Combine it with the profiler for a complete picture of past and present slow operations.
// Find all ops running longer than 5 seconds
db.currentOp({
active: true,
secs_running: { $gt: 5 }
})
// Kill a specific runaway op by opid
db.killOp(12345)Profiling Workflow: Investigate and Fix
A practical profiling workflow: 1) Set profiling level 1 with a 50 ms threshold. 2) Let the system run for 15–30 minutes under real traffic. 3) Query system.profile sorted by millis descending. 4) For each slow query, run explain('executionStats') on the same query. 5) Create the missing index. 6) Return profiler to normal threshold. Repeat until all critical queries hit indexes.
Quick Check
Test your understanding of MongoDB & NoSQL Databases concepts from this lesson.
Lesson Recap
In this lesson you learned: profiling level 1 records slow operations above the slowms threshold into system.profile, high docsExamined/nreturned ratios and COLLSCAN in planSummary identify missing indexes, and db.currentOp() lets you catch and kill long-running queries in real time. Next up we explore the ESR principle for designing optimal compound indexes.
Questions Fréquemment Posées
La leçon « Le profileur de base de données et le journal des requêtes lentes » est-elle gratuite ?
Oui — le texte complet de « Le profileur de base de données et le journal des requêtes lentes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MongoDB Academy, passe à CoddyKit PRO. Le cours MongoDB Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Le profileur de base de données et le journal des requêtes lentes » ?
Les apprenants activeront le profileur, définiront un seuil slowms et interrogeront system.profile pour trouver les opérations les plus coûteuses. Tu pratiques MongoDB Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer MongoDB Academy ?
Aucune expérience préalable n'est requise. MongoDB Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Le profileur de base de données et le journal des requêtes lentes » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon MongoDB Academy ?
Oui. Chaque leçon MongoDB Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Le profileur de base de données et le journal des requêtes lentes
- Règle du préfixe des index composés et principe ESR
- Intersection d’index ou index composés
- Conseils d’optimisation des chaînes de traitement d’agrégation