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 时, slowms sampleRate 选项不会用于分析和慢速查询日志行。

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

log file从 MongoDB 开始。 中,使用profile 命令或db.setProfilingLevel() 包装器方法对 50数据库分析器level slowmssampleRate 、 或 所做的更改会记录在 中。filter

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

db.setProfilingLevel(<level>, <options>)
范围
类型
说明
等级
整型

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

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

分析器会收集用时超过slowms值或与筛选器匹配的操作的数据。

设置筛选器后:

  • slowmssampleRate 选项不用于分析。

  • 分析器仅捕获与筛选器匹配的操作。

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

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

文档或整数

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

默认值:100
类型:整数

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

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

在较高的logLevel设置下,所有操作无论延迟如何,都会显示在诊断日志中,但以下情况除外:从节点记录慢速 oplog 条目消息。从节点仅记录慢速 oplog 条目;增加logLevel不会记录所有 oplog 条目。

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

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

注意

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

默认值:1.0
类型:双精度浮点数

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

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

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

注意

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

类型:对象

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

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

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

有关用于控制记录的操作的筛选器示例,请参阅设置筛选器以确定分析的操作。

注意

设置分析筛选器后, slowmssampleRate选项不会影响诊断日志或分析器。

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

其中:

  • 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()