“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

profile

在此页面上

  • 定义
  • 语法
  • 命令字段
  • 行为
  • 例子
  • 启用筛选
  • 取消设置筛选器
profile

5.0 版本中的更改

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

mongod 中,如果数据库分析器级别2,则在分析器上和 diagnostic log 上启用完整日志。

数据库分析器级别 1 中,以下设置修改分析器和 diagnostic log

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

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

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

mongos 上,您可以将 profile 级别设置为:

  • 0 为诊断日志设置 slowmssampleRatefilter

  • -1 读取当前设置。

默认情况下,分析器处于关闭状态。

警告

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

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

该命令具有以下语法:

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

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

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

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

注意

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

sampleRate
双精度浮点数

可选。默认值:1.0

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

注意

此参数影响与配置选项 operationProfiling.slowOpSampleRate 相同的设置,并且不会影响从节点上的慢速 oplog 条目日志消息。

filter
对象

可选。确定要分析或记录哪些操作的查询。

filter 查询采用以下形式:

{ <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" }
]
}
}
)

过滤器仅选择以下操作:

  • 至少 100 毫秒长,或者

  • testuser 提交。

要清除分析筛选器,请运行带有 filter: "unset" 选项的 profile

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

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

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

← ping