Docs HomeMongoDB Manual

db.setProfilingLevel()

Definition

db.setProfilingLevel(level, options)

Changed in version 5.0.

For a mongod instance, the method 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 running mongod instance. If the profiler is disabled, the method configures how slow operations are logged to the diagnostic log.

Note

Changes made to the profiling level with db.setProfilingLevel() do not persist. When the server restarts, it reverts to 0 (the default), or the value set by either the operationProfiling.mode setting or the --profile command-line option.

If the database profiler level is 1 or 2 (specifically, the database profiler is enabled), the slowms, sampleRate affect the behavior of both the profiler and the diagnostic log.

If the database profiler level is 0 (specifically, database profiler is disabled), the slowms and sampleRate, affect only the diagnostic log.

With mongos instances, the method sets the slowms, sampleRate and filter configuration settings, which configure how operations get written to the diagnostic log. You cannot enable the Database Profiler on a mongos instance because mongos does not have any collections that the profiler can write to. The profile level must be 0 for a mongos instance.

Starting in MongoDB 4.4.2, you can specify a filter on both mongod and mongos instances to control which operations are logged by the profiler. When you specify a filter for the profiler, the slowms, and sampleRate options are not used for profiling and slow-query log lines.

db.setProfilingLevel() provides a wrapper around the profile command.

Starting in MongoDB 5.0 (also available starting in 4.4.2, and 4.2.12), changes made to the database profiler level, slowms, sampleRate, or filter using the profile command or db.setProfilingLevel() wrapper method are recorded in the log file.

Syntax

The db.setProfilingLevel() method has the following form:

db.setProfilingLevel(<level>, <options>)

Parameters

ParameterTypeDescription
levelintegerConfigures the database profiler level. The following profiler levels are available:
LevelDescription
0The profiler is off and does not collect any data. This is the default profiler level.
1The profiler collects data for operations that take longer than the value of slowms or that match a filter.
When a filter is set:
  • The slowms and sampleRate options are not used for profiling.
  • The profiler only captures operations that match the filter.
2The profiler collects data for all operations.

Because profiling is not available on mongos, db.setProfilingLevel() cannot be used to set the profiling level to a value other than 0 on a mongos instance.

optionsdocument or integerOptional. Accepts an integer or an options document. If an integer value is passed as the options argument instead of a document, the value is assigned to slowms. The following options are available:
slowms
Default: 100
Type: integer
The slow operation time threshold, in milliseconds. Operations that run for longer than this threshold are considered slow.
When logLevel is set to 0, MongoDB records slow operations to the diagnostic log at a rate determined by slowOpSampleRate.
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.
For mongod instances, the setting affects both the diagnostic log and, if enabled, the profiler.
For mongos instances, the setting affects the diagnostic log only and not the profiler because profiling is not available on mongos.

Note

This argument affects the same setting as the configuration file option slowOpThresholdMs.
sampleRate
Default: 1.0
Type: double
The fraction of slow operations that should be profiled or logged. sampleRate accepts values between 0 and 1, inclusive.
For mongod instances, the setting affects both the diagnostic log and, if enabled, the profiler.
For mongos instances, the setting affects the diagnostic log only and not the profiler because profiling is not available on mongos.

Note

This argument affects the same setting as the configuration option slowOpSampleRate.
filterType: object
A filter expression that controls which operations are profiled and logged. The field in the filter expression can be any field in the profiler output.
For mongod instances, the setting affects both the diagnostic log and, if enabled, the profiler.
For mongos instances, the setting affects the diagnostic log only and not the profiler because profiling is not available on mongos.
For an example of a filter used to control logged operations, see Set a Filter to Determine Profiled Operations.
New in version 4.4.2.

Note

When a profiling filter is set, the slowms and sampleRate options do not affect the diagnostic log or the profiler.

Returns

The method returns a document that contains the previous values of the settings.

Where:

  • was is the previous level setting.

  • slowms is the previous slowms setting.

  • sampleRate is the previous sampleRate setting.

  • filter is the previous filter setting. (New in MongoDB 4.4.2)

  • note is a string explaining the behavior of filter. This field only appears in the output when filter is also present. (New in MongoDB 4.4.2)

Note

The filter and note fields only appear in the output if they were present in the previous level setting.

To view the current profiling level, see db.getProfilingStatus().

Behavior

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.

Examples

Enable Profiler and Set Slow Operation Threshold and Sample Rate

The following example sets for a mongod instance:

db.setProfilingLevel(1, { slowms: 20, sampleRate: 0.42 })

The operation returns a document with the previous values for the settings.

To view the current profiling level, see db.getProfilingStatus().

Disable Profiler and Set Slow Operation Threshold and Sample Rate

The following example sets for a mongod or mongos instance:

db.setProfilingLevel(0, { slowms: 20, sampleRate: 0.42 })

The operation returns a document with the previous values for the settings.

To view the current profiling level, see db.getProfilingStatus().

Set a Filter to Determine Profiled Operations

New in version 4.4.2.

The following example sets for a mongod instance:

  • the profiling level to 1,

  • a filter of { op: "query", millis: { $gt: 2000 } }, which causes the profiler to only record query operations that took longer than 2 seconds.

db.setProfilingLevel( 1, { filter: { op: "query", millis: { $gt: 2000 } } } )

The operation returns a document with the previous values for the settings.

To view the current profiling level, see db.getProfilingStatus().

Unset a Filter

To clear a profile filter, run db.setProfilingLevel() with the filter: "unset" option.

db.setProfilingLevel( 1, { filter: "unset" } )

The operation returns a document with the previous values for the settings.

To view the current profiling level, see db.getProfilingStatus().