Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

db.setProfilingLevel()

在此页面上

  • 定义
  • 语法
  • 参数
  • 返回:
  • 行为
  • 示例
  • 启用分析器并设置慢操作阈值和采样率
  • 禁用性能分析器并设置慢操作阈值和采样率
  • 设置过滤器以确定要进行分析的操作
  • 取消设置筛选器
db.setProfilingLevel(level, options)

5.0 版本中的更改

对于 mongod 实例,该方法可启用、禁用或配置数据库分析器 。分析器捕获并记录正在运行的 mongod 实例上的写入操作、游标和数据库命令性能的数据。如果分析器被禁用,该方法将配置如何将慢操作记录到诊断日志中。

注意

使用 db.setProfilingLevel() 对分析级别所做的更改不会保留。当服务器重新启动时,它会恢复为 0(默认值),或者由 operationProfiling.mode 设置或 --profile 命令行选项设置的值。

如果数据库分析器级别12(具体而言,数据库分析器已启用),则 slowmssampleRate 会影响分析器和 diagnostic log 的行为

如果数据库分析器级别0(具体来说,数据库分析器已禁用),则 SlowmsSampleRate 仅影响诊断日志。

使用 mongos 实例,该方法设置 slowmssampleRatefilter 配置设置,从而配置如何将操作写入诊断日志。您无法在 mongos 实例上启用数据库分析器,因为 mongos 没有分析器可以写入的任何集合。对于 mongos 实例,profile 等级必须为 0

您可以在 mongodmongos 实例上指定过滤器,以控制分析器记录哪些操作。当您为分析器指定 filter 时,slowmssampleRate 选项不用于分析和慢查询日志行。

db.setProfilingLevel() 提供 profile 命令的封装器。

从 MongoDB 5.0 开始,使用 profile 命令或 db.setProfilingLevel() 封装方法对数据库分析器 levelslowmssampleRatefilter 进行的更改记录在 log file 中。

db.setProfilingLevel() 方法采用以下形式:

db.setProfilingLevel(<level>, <options>)
Parameter
类型
说明
整型

配置数据库分析器级别。以下分析器级别可用:

0
分析器已关闭,因此不收集任何数据。这是默认的分析器级别。
1

分析器会为耗时超过 slowms 值或与过滤器匹配的操作收集数据。

设置筛选器后:

  • slowmssampleRate 选项不用于分析。

  • 分析器仅捕获与过滤器匹配的操作。

2
该分析器会收集所有操作的数据。

由于分析在 mongos 上不可用,因此 db.setProfilingLevel() 无法在 mongos 实例上将分析级别设置为 0 以外的值。

文档或整数

可选。接受整数或选项文档。如果将整数值作为 options 参数而不是文档传递,则该值将分配给 slowms。可以使用以下选项:

Default: 100
Type: integer

慢速操作时长阈值(以毫秒为单位)。运行时长超过此阈值的操作被视为慢速操作。

logLevel 设置为 0 时,MongoDB 会将慢速操作记录到诊断日志中,记录速度由 slowOpSampleRate 确定。

如果 logLevel 设置得较高,所有操作无论延迟如何,都会显示在诊断日志中,但从节点记录慢速 oplog 条目消息这项操作除外。从节点仅记录慢速 oplog 条目。增加 logLevel 不会导致记录所有 oplog 条目。

对于 mongod 实例,该设置会影响诊断日志,如果启用,还会影响分析器。

对于 mongos 实例,该设置仅影响诊断日志,不影响分析器,因为在 mongos 上无法进行分析。

此参数影响与配置文件选项 slowOpThresholdMs 相同的设置。

Default: 1.0
Type: double

应分析或记录的慢速操作的比例。sampleRate 接受 0 到 1(含)之间的值。

对于 mongod 实例,该设置会影响诊断日志,如果启用,还会影响分析器。

对于 mongos 实例,该设置仅影响诊断日志,不影响分析器,因为在 mongos 上无法进行分析。

此参数影响与配置选项 slowOpSampleRate 相同的设置。

类型:对象

一个筛选器表达式,用于控制要分析和记录的操作。该筛选器表达式中的字段可以是分析器输出中的任何字段

对于 mongod 实例,该设置会影响诊断日志,如果启用,还会影响分析器。

对于 mongos 实例,该设置仅影响诊断日志,不影响分析器,因为在 mongos 上无法进行分析。

如需用于控制已记录操作的过滤器示例,请参阅设置过滤器以确定已分析的操作

设置分析过滤器时,slowmssampleRate 选项不会影响诊断日志或分析器。

该方法返回一个包含先前设置值的文档。

{
"was" : 2,
"slowms" : 100,
"sampleRate" : 1,
"filter" : {
"$and" : [
{
"op" : {
"$eq" : "query"
}
},
{
"millis" : {
"$gt" : 20000
}
}
]
},
"note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.",
"ok" : 1
}
{
"was" : 0,
"slowms" : 100,
"sampleRate" : 1,
"filter" : {
"$and" : [
{
"op" : {
"$eq" : "query"
}
},
{
"millis" : {
"$gte" : 2000
}
}
]
},
"note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.",
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1572991238, 1),
"signature" : {
"hash" : BinData(0,"hg6GnlrVhV9MAhwWdeHmHQ4T4qU="),
"keyId" : NumberLong("6755945537557495811")
}
},
"operationTime" : Timestamp(1572991238, 1)
}
{
"was" : 0,
"slowms" : 100,
"sampleRate" : 1,
"filter" : {
"$and" : [
{
"op" : {
"$eq" : "query"
}
},
{
"millis" : {
"$gte" : 2000
}
}
]
},
"note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.",
"ok" : 1,
"operationTime" : Timestamp(1572991499, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1572991499, 2),
"signature" : {
"hash" : BinData(0,"nhCquIxUw7thlrBudXe3PnsnvP0="),
"keyId" : NumberLong("6755946491040235540")
}
}
}

其中:

  • was上一个级别设置。

  • slowms之前slowms 设置。

  • sampleRate之前的 sampleRate 设置。

  • filter之前的过滤器设置。

  • note 是解释 filter 行为的字符串。只有当 filter 也存在时,此字段才会出现在输出中。

注意

filternote 字段仅在先前的级别设置中存在时才会出现在输出中。

要查看当前分析级别,请参阅 db.getProfilingStatus()

警告

分析会降低性能,并在系统日志中暴露未经加密的查询数据。在生产部署中配置和启用分析器之前,请仔细考虑对性能和安全的影响。

有关潜在性能下降的更多信息,请参阅分析器开销

以下示例集用于 mongod 实例:

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

该操作返回一个包含先前设置值的文档。

要查看当前分析级别,请参阅 db.getProfilingStatus()

下面的示例为 mongodmongos 实例进行了设置:

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

该操作返回一个包含先前设置值的文档。

要查看当前分析级别,请参阅 db.getProfilingStatus()

以下示例集用于 mongod 实例:

  • 分析级别设置为 1

  • 过滤器{ op: "query", millis: { $gt: 2000 } },这会导致分析器仅记录耗时超过 2 秒的 query 操作。

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

该操作返回一个包含先前设置值的文档。

要查看当前分析级别,请参阅 db.getProfilingStatus()

要清除分析筛选器,请运行带有 filter: "unset" 选项的 db.setProfilingLevel()

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

该操作返回一个包含先前设置值的文档。

要查看当前分析级别,请参阅 db.getProfilingStatus()

后退

db.setLogLevel