On this page
Database Profiler
On this page
The database profiler collects detailed information about Database Commands executed against a running mongod
instance. This includes CRUD operations as well as configuration and administration commands. The profiler writes all the data it collects to the system.profile
collection, a capped collection in the admin
database. See Database Profiler Output for an overview of the system.profile
documents created by the profiler.
The profiler is off
by default. You can enable the profiler on a per-database or per-instance basis at one of several profiling levels.
This document outlines a number of key administration options for the database profiler. For additional related information, consider the following resources:
Profiling Levels
The following profiling levels are available:
Level | Description |
---|---|
0 |
The profiler is off and does not collect any data. This is the default profiler level. |
1 |
The profiler collects data for operations that take longer than the value of slowms . |
2 |
The profiler collects data for all operations. |
Enable and Configure Database Profiling
You can enable database profiling from the mongo
shell or through a driver using the profile
command. This section will describe how to do so from the mongo
shell. See your driver documentation if you want to control the profiler from within your application.
When you enable profiling, you also set the profiling level. The profiler records data in the system.profile
collection. MongoDB creates the system.profile
collection in a database after you enable profiling for that database.
To enable profiling and set the profiling level, use the db.setProfilingLevel()
helper in the mongo
shell, passing the profiling level as a parameter. For example, to enable profiling for all database operations, consider the following operation in the mongo
shell:
db.setProfilingLevel(2)
The shell returns a document showing the previous level of profiling. The "ok" : 1
key-value pair indicates the operation succeeded:
{ "was" : 0, "slowms" : 100, "sampleRate" : 1.0, "ok" : 1 }
To verify the new setting, see the Check Profiling Level section.
Specify the Threshold for Slow Operations
To change the slow operation threshold, specify the desired threshold value in one of the following ways:
- Set the value of
slowms
using theprofile
command ordb.setProfilingLevel()
shell helper method. - Set the value of
--slowms
from the command line at startup. - Set the value of
slowOpThresholdMs
in a configuration file.
By default, the slow operation threshold is 100 milliseconds. Databases with a profiling level of 1
will profile operations slower than the threshold.
For example, the following code sets the profiling level for the current database to 1
and sets the slow operation threshold for the mongod
instance to 20 milliseconds:
db.setProfilingLevel(1, { slowms: 20 })
Important
The slow operation threshold applies to all databases in a mongod
instance. It is used by both the database profiler and the system log and should be set to the highest useful value to avoid performance degradation.
For MongoDB 3.6 deployments, starting in version 3.6.11, secondary members of a replica set now log oplog entries that take longer than the slow operation threshold to apply. These slow oplog messages are logged for the secondaries in the diagnostic log
under the REPL
component with the text applied op: <oplog entry> took <num>ms
. These slow oplog entries depend only on the slow operation threshold. They do not depend on the log levels (either at the system or component level), or the profiling level, or the slow operation sample rate. The profiler does not capture slow oplog entries.
Profile a Random Sample of Slow Operations
New in version 3.6.
To profile only a randomly sampled subset of all slow operations , specify the desired sample rate in one of the following ways: [1]
- Set the value of
sampleRate
using theprofile
command ordb.setProfilingLevel()
shell helper method. - Set the value of
--slowOpSampleRate
from the command line at startup. - Set the value of
slowOpSampleRate
in a configuration file.
By default, sampleRate
is set to 1.0
, meaning all slow operations are profiled. When sampleRate
is set between 0 and 1, databases with profiling level 1
will only profile a randomly sampled percentage of slow operations according to sampleRate
.
For example, the following method sets the profiling level for the current database to 1
and sets the profiler to sample 42% of all slow operations:
db.setProfilingLevel(1, { sampleRate: 0.42 })
Important
The sample rate value applies to all databases in a mongod
instance. It is used by both the database profiler and the system log.
Important
When logLevel
is set to 0
, MongoDB records slow operations to the diagnostic log at a rate determined by slowOpSampleRate
. For MongoDB 3.6 deployments, starting in version 3.6.11, the secondaries of replica sets log all oplog entry messages that take longer than the slow operation threshold to apply regardless of the sample rate.
At higher logLevel
settings, all operations appear in the diagnostic log regardless of their latency with the following exception: the logging of slow oplog entry messages by the secondaries. The secondaries log only the slow oplog entries; increasing the logLevel
does not log all oplog entries.
Check Profiling Level
To view the profiling level, issue the following from the mongo
shell:
db.getProfilingStatus()
The shell returns a document similar to the following:
{ "was" : 0, "slowms" : 100, "sampleRate" : 1.0, "ok" : 1 }
The was
field indicates the current profiling level.
The slowms
field indicates operation time threshold, in milliseconds, beyond which operations are considered slow.
The sampleRate
field indicates the percentage of slow operations that should be profiled.
To return only the profiling level, use the db.getProfilingLevel()
helper in the mongo
shell as in the following:
db.getProfilingLevel()
Disable Profiling
To disable profiling, use the following helper in the mongo
shell:
db.setProfilingLevel(0)
Enable Profiling for an Entire mongod
Instance
For development purposes in testing environments, you can enable database profiling for an entire mongod
instance. The profiling level applies to all databases provided by the mongod
instance.
To enable profiling for a mongod
instance, pass the following options to mongod
at startup.
mongod --profile 1 --slowms 15 --slowOpSampleRate 0.5
Al