DEV Community

Shiv Iyer
Shiv Iyer

Posted on

How can I use the MongoDB explain plan to troubleshoot query performance

MongoDB's explain plan is a powerful tool for troubleshooting query performance. Here's how you can use it effectively:

Running an Explain Plan

To generate an explain plan, you can use the following methods:

  1. For find queries:
   db.collection.find(<query>).explain()
Enter fullscreen mode Exit fullscreen mode
  1. For aggregation pipelines:
   db.collection.explain().aggregate([<pipeline>])
Enter fullscreen mode Exit fullscreen mode
  1. For other operations:
   db.collection.explain().<operation>
Enter fullscreen mode Exit fullscreen mode

Understanding Explain Output

The explain plan provides detailed information about query execution in several key areas:

Query Planner

This section shows the plan selected by the query optimizer:

  • winningPlan: Indicates the chosen execution plan
  • rejectedPlans: Lists alternative plans that were considered but not used

Execution Stats

This part offers insights into the actual query execution:

  • nReturned: Number of documents returned
  • totalKeysExamined: Number of index keys scanned
  • totalDocsExamined: Number of documents scanned
  • executionTimeMillis: Total execution time

Index Usage

Look for the following indicators:

  • IXSCAN: Indicates an index was used
  • COLLSCAN: Suggests a full collection scan, which may be inefficient for large datasets

Troubleshooting Tips

  1. Compare documents scanned vs. returned: A high ratio of examined to returned documents may indicate a need for better indexing[1].

  2. Check for COLLSCAN: If you see this instead of IXSCAN, consider adding an appropriate index[1].

  3. Analyze execution time: Look at the executionTimeMillis to identify slow queries[3].

  4. Examine rejected plans: Understanding why certain plans were rejected can help in optimizing indexes or query structure[4].

  5. Use different verbosity modes:

    • queryPlanner: Default mode, shows the winning plan
    • executionStats: Includes execution statistics
    • allPlansExecution: Provides data on all considered plans[4]
  6. Iterate and refine: Use the explain plan results to make incremental improvements to your queries and indexes[7].

By leveraging the explain plan effectively, you can identify performance bottlenecks, optimize indexing strategies, and refine query structures to significantly improve MongoDB query performance.

Sources
[1] MongoDB: Investigate Queries with explain() and Index Usage (part 2) https://www.percona.com/blog/mongodb-investigate-queries-with-explain-index-usage-part-2/
[2] Index analysis using Explain command- Scaler Topics https://www.scaler.com/topics/mongodb/index-analysis-using-explain-command/
[3] Interpret Explain Plan Results - MongoDB Manual v8.0 https://www.mongodb.com/docs/manual/tutorial/analyze-query-plan/
[4] explain - MongoDB Manual v8.0 https://www.mongodb.com/docs/manual/reference/command/explain/
[5] Explain Results - MongoDB Manual v5.0 https://www.mongodb.com/docs/v5.0/reference/explain-results/
[6] Track and Troubleshoot MongoDB Performance With Datadog ... https://www.datadoghq.com/blog/mongodb-database-monitoring/
[7] How to Optimize MongoDB Queries for Peak Performance? https://embarkingonvoyage.com/blog/technologies/how-to-optimize-mongodb-queries-for-peak-performance/
[8] Using Explain Plans - Practical MongoDB Aggregations Book https://www.practical-mongodb-aggregations.com/guides/explain.html
[9] db.collection.explain() - MongoDB Manual v8.0 https://www.mongodb.com/docs/manual/reference/method/db.collection.explain/
[10] cursor.explain() - MongoDB Manual v8.0 https://www.mongodb.com/docs/manual/reference/method/cursor.explain/

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more