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

profile

在此页面上

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

5.0 版本中的更改

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

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

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

  • slowms

  • 采样率

  • 筛选器

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

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

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

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 实例上将分析级别设立为0 mongos以外的值。

slowms

int

可选。默认值:100

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

根据 workingMillis记录慢操作,这是 MongoDB 处理该操作所花费的时间。这意味着等待锁和流量控制等因素不会影响操作是否超过慢操作阈值。

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

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

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

sampleRate

double

可选。默认值: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