profile (database command) (original) (raw)
profile
Changed in version 5.0.
For a mongod instance, the command enables, disables, or configures the database profiler. The profiler captures and records data on the performance of write operations, cursors, and database commands on a runningmongod instance. If the profiler is disabled, the command configures how slow operations are logged to the diagnostic log.
On mongod, if the database profiler level is 2, full logging is enabled on the profiler and the diagnostic log.
At database profiler level 1, the following settings modify both the profiler and thediagnostic log:
If the database profiler level is0, the database profiler is disabled. At level 0 the following settings only modify the diagnostic log:
For a mongos instance, the command only configures how operations get written to the diagnostic log. You cannot enable thedatabase profiler on a mongosinstance because mongos does not have any collections that the profiler can write to.
Starting in MongoDB 5.0, changes made to the database profiler level, slowms, sampleRate, orfilter using the profile command ordb.setProfilingLevel() wrapper method are recorded in thelog file.
On mongos, you can set profile level to:
0to set theslowms,sampleRate, andfilterfor the diagnostic log;-1to read the current settings.
The profiler is off by default.
Warning
Profiling can degrade performance and expose unencrypted query data in the system log. Carefully consider any performance and security implications before configuring and enabling the profiler on a production deployment.
See Profiler Overhead for more information on potential performance degradation.
This command is available in deployments hosted in the following environments:
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
Note
This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, seeUnsupported Commands.
- MongoDB Enterprise: The subscription-based, self-managed version of MongoDB
- MongoDB Community: The source-available, free-to-use, and self-managed version of MongoDB
The command has the following syntax:
db.runCommand(
{
profile: <level>,
slowms: <threshold>,
sampleRate: <rate>,
filter: <filter expression>
}
)
The command takes the following fields:
| Field | Type | Description |
|---|---|---|
| profile | int | Configures the profiler level. The following profiler levels are available:0The profiler is off and does not collect any data. This is the default profiler level.1The profiler collects data for operations that exceed theslowms threshold or match a specified filter.When a filter is set:The slowms and sampleRate options are not used for profiling.The profiler only captures operations that match thefilter.2The profiler collects data for all operations.When set to level 2, the profiler ignores user provided values for slowms and filter.Since profiling is not available on mongos, theprofile command cannot be used to set the profiling level to a value other than 0 on a mongos instance. |
| slowms | int | Optional. Default: 100The slow operation time threshold, in milliseconds. Operations that run for longer than this threshold are considered slow.Slow operations are logged based on workingMillis, which is the amount of time that MongoDB spends working on that operation. This means that factors such as waiting for locks and flow control do not affect whether an operation exceeds the slow operation threshold.When logLevel is set to 0, MongoDB records _slow_operations to the diagnostic log at a rate determined byslowOpSampleRate.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.This argument affects the same setting as the configuration optionoperationProfiling.slowOpThresholdMs. |
| sampleRate | double | Optional. Default: 1.0The fraction of slow operations that should be profiled or logged.sampleRate accepts values between 0 and 1, inclusive.This argument affects the same setting as the configuration optionoperationProfiling.slowOpSampleRate and does not affect the slow oplog entry log messages on secondaries. |
| filter | object | Optional. A query that determines which operations are profiled or logged.The filter query takes the following form:{ <field1>: <expression1>, ... }The query can be any legal find()operation where the query matches a field in theprofiler output.This argument affects the same setting as the configuration option operationProfiling.filter. When filter is set, the slowms and sampleRateoptions are not used for profiling and slow-query log lines. |
The db.getProfilingStatus() anddb.setProfilingLevel() shell methods provide wrappers around theprofile command.
The profile command obtains a write lock on the affected database while enabling or disabling the profiler. This is typically a short operation. The lock blocks other operations until theprofile command has completed.
When connected to a sharded cluster through mongos, you can run the profile command against any database.
Tip
To enable profiling and filter the logged data:
db.runCommand(
{
profile: 1,
filter:
{
$or:
[
{ millis: { $gte: 100 } },
{ user: "testuser@admin" }
]
}
}
)
The filter only selects operations that are:
- at least
100milliseconds long, or - submitted by the
testuser.
To clear a profile filter, run profile with the filter: "unset"option.
db.runCommand(
{
profile: 1,
filter: "unset"
}
)
The operation returns a document with the previous values for the settings.
To view the current profiling level, seedb.getProfilingStatus().