profile
On this page
Definition
profile
Changed in version 4.4.2.
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 is1
or2
(i.e. the database profiler is enabled), the slowms, sampleRate, and filter affect the behavior of both the profiler and thediagnostic log
.If the database profiler level is
0
(i.e. database profiler is disabled), the slowms, sampleRate, and filter affect only the diagnostic log.Starting in MongoDB 4.0, for a
mongos
instance, the command only configures how operations get written to the diagnostic log. You cannot enable the Database Profiler on amongos
instance becausemongos
does not have any collections that the profiler can write to.Starting in MongoDB 4.4.2 (also available starting in 4.2.12), changes made to the database profiler
level
,slowms
,sampleRate
, orfilter
using theprofile
command ordb.setProfilingLevel()
wrapper method are recorded in thelog file
.On
mongos
, you can setprofile
level to:0
to set theslowms
,sampleRate
, andfilter
for the diagnostic log;-1
to 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.
The
profile
command has the following syntax:{ profile: <level>, slowms: <threshold>, sampleRate: <rate>, filter: <filter expression> } FieldTypeDescriptionprofile
intConfigures the profiler level. The following profiler levels are available:
LevelDescription0
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 ofslowms
.2
The profiler collects data for all operations.Since profiling is not available on
mongos
, theprofile
command cannot be used to set the profiling level to a value other than0
on amongos
instance.slowms
intOptional. Default: 100
The slow operation time threshold, in milliseconds. Operations that run for longer than this threshold are considered slow.
When
logLevel
is set to0
, 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 thelogLevel
does not log all oplog entries.Note
This argument affects the same setting as the configuration option
slowOpThresholdMs
.sampleRate
doubleOptional. Default: 1.0
The fraction of slow operations that should be profiled or logged.sampleRate
accepts values between 0 and 1, inclusive.Note
This argument affects the same setting as the configuration option
slowOpSampleRate
and does not affect the slow oplog entry log messages on secondaries (available starting in MongoDB 4.2).New in version 3.6.
filter
objectOptional.
A filter expression that controls which operations are profiled and logged.
The
filter
expression takes the following form:{ <field1>: <expression1>, ... } The
<field>
can be any field in the profiler output. The<expression>
is a query condition expression.Note
This argument affects the same setting as the configuration option
filter
. Whenfilter
is set, theslowms
andsampleRate
options are not used for profiling and slow-query log lines.New in version 4.4.2.
The db.getProfilingStatus()
and
db.setProfilingLevel()
shell methods provide wrappers around the profile
command.
Behavior
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 the
profile
command has completed.
Starting in MongoDB 4.4.2, when connected to a sharded cluster through
mongos
, you can run the profile
command
against any database. In previous versions of MongoDB, when connected
through mongos
, you can only run the profile
command against the admin
database.