简体   繁体   中英

Track MongoDB performance?

Is there a way to track 'query' performance in MongoDB? Specially testing indexes or subdocuments?

In sql you can run queries, see execution time and other analytic metrics.

I have a huge mongoDB collection and want to try different variations and indexes, not sure how to test it, would be nice to see how long did it take to find a record.. (I am new in MongoDB). Thanks

There are two things here that you'll likely be familiar with.

  1. Explain plans
  2. Slow Logs

Explain Plans

Here are some basic docs on explain. Running explain is as simple as db.foo.find(query).explain() . ( note that this actually runs the query, so if your query is slow this will be too )

To understand the output, you'll want to check some of the docs on the slow logs below. You're basically given details about "how much index was scanned", "how many are found", etc. As is the case with such performance details, interpretation is really up to you. Read the docs above and below to point you in the right direction.

Slow Logs

By default, slow logs are active with a threshold of 100ms. Here's a link to the full documentation on profiling. A couple of key points to get you started:

Get/Set profiling:

db.setProfilingLevel(2); // 0 => none, 1 => slow, 2 => all
db.getProfilingLevel();

See slow queries:

db.system.profile.find()

MongoDB has a query profiler you can turn on. See: http://www.mongodb.org/display/DOCS/Database+Profiler

I recommend, based on my experience , to read mongologs with the mtools support ( https://github.com/rueckstiess/mtools ), there are lots of feature which help reading output .

For instance I found very useful the mlogFilter command eg:

mlogfilter.exe   [PATH_TO_FILE_LOG]  --slow --json | mongoimport --db logsTest -c logCollection --drop

Launching this command you will record all the slow queries in a table.

Activating mongoprofiler could be a problem for performance in production environment, so you can achieve the same results reading logs.

Consider also that the system.profile collection is capped , so you should check the size of the capped collection because otherwise you could not find the queries you're looking for.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM