文档菜单
文档首页
/
MongoDB 手册
/ / /

profile

本页内容

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 示例
  • 启用过滤
  • 取消设置过滤
profile

已更改在版本中5.0.

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

mongod 上,如果 数据库分析器级别2,则在分析器中启用完整日志记录,并在 诊断日志 中。

数据库分析器级别 1 时,以下设置会修改分析器和 诊断日志

  • slowms

  • sampleRate

  • filter

如果 数据库分析器级别0,则 数据库分析器 被禁用。在级别 0 时,以下设置仅修改诊断日志

对于 mongos 实例,该命令仅配置如何将操作写入诊断日志。您不能在 数据库分析器 上启用 mongos 实例,因为 mongos 没有任何分析器可以写入的集合。

从 MongoDB 5.0 开始,使用 profile 命令或 db.setProfilingLevel() 包装方法对 数据库分析器levelslowmssampleRatefilter 进行更改将记录在 日志文件 中。mongos 上,您可以设置 profile 级别为

0 以设置诊断日志的 slowmssampleRatefilter

  • -1 以读取当前设置。

  • 默认情况下分析器是关闭的。

注意

警告

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

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

此命令在以下环境中提供

注意

此命令在所有 MongoDB Atlas 集群中受支持。有关 Atlas 对所有命令的支持信息,请参阅 不受支持的命令

命令有以下语法

db.runCommand(
{
profile: <level>,
slowms: <threshold>,
sampleRate: <rate>,
filter: <filter expression>
}
)

命令接受以下字段

字段
类型
描述
profile
int

配置分析器级别。以下分析器级别可用

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

分析器收集超过 slowms 阈值或匹配指定 过滤器。 的操作数据。

当设置过滤器时

  • 不使用 slowmssampleRate 选项进行分析。

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

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

由于在 mongos 上不可用,因此 profile 命令不能用于将 mongos 实例上的分析器级别设置为除 0 之外的其他值。

slowms
int

可选。默认:100

慢操作时间阈值(毫秒)。运行时间超过此阈值的操作被认为是

慢操作基于workingMillis进行记录,这是MongoDB在该操作上花费的时间量。这意味着等待锁和流量控制等因素不会影响操作是否超过慢操作阈值。

logLevel设置为0时,MongoDB以slowOpSampleRate(由slowOpSampleRate确定)的速率将操作记录到诊断日志中。

在更高的logLevel设置下,所有操作都会出现在诊断日志中,无论它们的延迟如何,以下例外:从辅助节点记录慢操作日志条目。辅助节点仅记录慢操作日志条目;增加logLevel不会记录所有操作日志条目。

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

sampleRate
double

可选。默认:1.0

应分析或记录的操作的分数。sampleRate接受介于0和1之间的值,包括端点。

此参数影响与配置选项operationProfiling.slowOpSampleRate相同的设置,并且不会影响辅助节点上的慢操作日志条目。

filter
object

可选。一个查询,用于确定哪些操作要进行分析或记录。

过滤查询采用以下形式

{ <field1>: <expression1>, ... }

查询可以是任何合法的find()操作,其中查询<field>分析器输出中的字段匹配。

此参数影响与配置选项operationProfiling.filter相同的设置。当设置filter时,不使用slowmssampleRate选项进行分析和慢查询日志行。

db.getProfilingStatus()db.setProfilingLevel() shell方法profile命令的包装器。

执行 profile 命令时,会对受影响的数据库加写锁,同时启用或禁用性能分析器。这通常是一个短暂的操作。该锁会阻塞其他操作,直到 profile 命令执行完毕。

通过 mongos 连接到分片集群时,您可以对任何数据库运行 profile 命令。

提示

另请参阅

要启用性能分析并过滤记录的数据

db.runCommand(
{
profile: 1,
filter:
{
$or:
[
{ millis: { $gte: 100 } },
{ user: "testuser@admin" }
]
}
}
)

filter 只选择

  • 至少 100 毫秒长,或者

  • testuser 提交的操作。

要清除配置文件过滤器,请使用 profile 命令并指定 filter: "unset" 选项。

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

此操作会返回设置的上一个值的文档。

要查看当前的配置文件级别,请参阅 db.getProfilingStatus()

返回

ping