Bird
Raised Fist0
MongoDBquery~10 mins

Profiler for slow queries in MongoDB - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Profiler for slow queries
Enable Profiler
↓
Profiler Logs Queries
↓
Check Query Execution Time
↓
Log Query
↓
Analyze Logs
The profiler is turned on, it watches queries, logs those that are slow, and then you analyze these logs to improve performance.
Execution Sample
MongoDB
db.setProfilingLevel(1, { slowms: 100 })
db.system.profile.find({ millis: { $gt: 100 } })
Enable profiling for queries slower than 100ms and then find those slow queries in the profiler collection.
Execution Table
StepActionProfiler StateQuery LoggedOutput
1Enable profiler with slowms=100Profiling ON, slowms=100NoProfiler ready
2Run query taking 50msProfiling ONNoQuery runs, not logged (50 < 100)
3Run query taking 150msProfiling ONYesQuery logged (150 > 100)
4Query profiler collection for slow queriesProfiling ONN/AReturns logged slow query details
5Disable profilerProfiling OFFNoProfiling stopped
💡 Profiler stops logging when disabled or slowms threshold not met
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
profilingLevel0 (off)1 (on)1 (on)1 (on)1 (on)0 (off)
slowms100 (default)100100100100100
loggedQueriesCount000111
Key Moments - 2 Insights
Why doesn't every query get logged when the profiler is on?
Only queries slower than the slowms threshold are logged, as shown in execution_table step 2 and 3 where 50ms query is ignored but 150ms query is logged.
What happens if you disable the profiler?
Profiler stops logging any queries immediately, as shown in execution_table step 5 where profilingLevel changes to 0 and no queries are logged.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step is the first slow query logged?
AStep 2
BStep 3
CStep 4
DStep 5
💡 Hint
Check the 'Query Logged' column in execution_table rows
According to variable_tracker, what is the profilingLevel after enabling the profiler?
A0 (off)
B2 (debug)
C1 (on)
D100
💡 Hint
Look at profilingLevel value after Step 1 in variable_tracker
If slowms was set to 200, what would happen to the query taking 150ms in step 3?
AIt would not be logged
BProfiler would disable
CIt would be logged
DQuery would run faster
💡 Hint
Compare query time with slowms threshold in execution_table step 3
Concept Snapshot
Profiler for slow queries in MongoDB:
- Enable with db.setProfilingLevel(level, {slowms: ms})
- Logs queries slower than slowms
- Check logs in system.profile collection
- Disable with db.setProfilingLevel(0)
- Helps find slow queries to optimize
Full Transcript
This visual execution shows how MongoDB's profiler works for slow queries. First, you enable the profiler with a threshold (slowms) that sets the minimum query time to log. Queries faster than this threshold are ignored. When a query runs slower than slowms, it is logged in the system.profile collection. You can then query this collection to see details of slow queries. Finally, you can disable the profiler to stop logging. Variables like profilingLevel and slowms control this behavior, and the loggedQueriesCount tracks how many slow queries have been recorded.

Practice

(1/5)
1. What is the main purpose of the MongoDB profiler when set to capture slow queries?
easy
A. To increase the speed of all queries by caching results
B. To record queries that take longer than a specified time to help optimize performance
C. To delete slow queries from the database
D. To automatically fix slow queries without user intervention

Solution

  1. Step 1: Understand profiler's role

    The profiler records queries that exceed a time threshold to help identify slow operations.
  2. Step 2: Identify what profiler does not do

    It does not fix or delete queries automatically; it only logs them for review.
  3. Final Answer:

    To record queries that take longer than a specified time to help optimize performance -> Option B
  4. Quick Check:

    Profiler logs slow queries = To record queries that take longer than a specified time to help optimize performance [OK]
Hint: Profiler logs slow queries for review, not automatic fixes [OK]
Common Mistakes:
  • Thinking profiler fixes queries automatically
  • Confusing profiler with query caching
  • Assuming profiler deletes slow queries
2. Which command correctly sets the MongoDB profiler to log all queries slower than 100 milliseconds?
easy
A. db.setProfilingLevel(2, { slowms: 100 })
B. db.setProfilingLevel(0, { slowms: 100 })
C. db.setProfilingLevel(1, { slowms: 100 })
D. db.setProfilingLevel(1, 100)

Solution

  1. Step 1: Recall profiling levels

    Level 1 logs slow queries exceeding the slowms threshold.
  2. Step 2: Check correct syntax

    The correct syntax uses level and options object with slowms key, so db.setProfilingLevel(1, { slowms: 100 }) is valid.
  3. Final Answer:

    db.setProfilingLevel(1, { slowms: 100 }) -> Option C
  4. Quick Check:

    Level 1 + slowms option = db.setProfilingLevel(1, { slowms: 100 }) [OK]
Hint: Use level 1 with slowms in options object for slow query logging [OK]
Common Mistakes:
  • Using level 2 to log only slow queries (it logs all queries)
  • Passing slowms as second argument without object
  • Setting level 0 which disables profiling
3. Given the following profiler query:
db.system.profile.find({ millis: { $gt: 50 } })

What does this query return?
medium
A. All queries that took more than 50 milliseconds
B. All queries that took less than 50 milliseconds
C. All queries that took exactly 50 milliseconds
D. All queries regardless of execution time

Solution

  1. Step 1: Understand the query filter

    The filter { millis: { $gt: 50 } } selects documents where the millis field is greater than 50.
  2. Step 2: Interpret millis field meaning

    Millis records query execution time in milliseconds, so this finds queries slower than 50ms.
  3. Final Answer:

    All queries that took more than 50 milliseconds -> Option A
  4. Quick Check:

    Filter $gt 50 means queries > 50ms = All queries that took more than 50 milliseconds [OK]
Hint: $gt means greater than, so queries slower than threshold [OK]
Common Mistakes:
  • Confusing $gt with $lt (greater than vs less than)
  • Thinking it returns queries equal to 50ms
  • Assuming it returns all queries
4. You run db.setProfilingLevel(1, { slowms: '100' }) but no slow queries are logged. What is the problem?
medium
A. The profiler only logs queries slower than 1000ms by default
B. Profiling level 1 does not log slow queries
C. You must restart MongoDB after setting profiling level
D. The slowms value should be a number, not a string

Solution

  1. Step 1: Check slowms parameter type

    slowms expects a number, but '100' is a string, causing it to ignore the threshold.
  2. Step 2: Understand profiling behavior

    Profiling level 1 logs slow queries, no restart needed, and default slowms is 100ms if not set.
  3. Final Answer:

    The slowms value should be a number, not a string -> Option D
  4. Quick Check:

    slowms must be numeric, not string = The slowms value should be a number, not a string [OK]
Hint: Use number type for slowms, not string quotes [OK]
Common Mistakes:
  • Passing slowms as string instead of number
  • Thinking profiling level 1 disables logging
  • Believing MongoDB needs restart after setting profiler
5. You want to find the top 3 slowest queries recorded by the profiler. Which query will correctly return these?
hard
A. db.system.profile.find().sort({ millis: -1 }).limit(3)
B. db.system.profile.find().sort({ millis: 1 }).limit(3)
C. db.system.profile.find({ millis: { $lt: 3 } })
D. db.system.profile.find().limit(3)

Solution

  1. Step 1: Sort queries by execution time descending

    Sorting by millis: -1 orders queries from slowest to fastest.
  2. Step 2: Limit results to top 3

    Using limit(3) returns only the first three documents after sorting.
  3. Final Answer:

    db.system.profile.find().sort({ millis: -1 }).limit(3) -> Option A
  4. Quick Check:

    Sort descending + limit 3 = db.system.profile.find().sort({ millis: -1 }).limit(3) [OK]
Hint: Sort by millis descending, then limit 3 for slowest queries [OK]
Common Mistakes:
  • Sorting millis ascending returns fastest queries
  • Filtering millis less than 3 returns wrong data
  • Not sorting before limiting results
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard