db.setProfilingLevel()
定义
db.setProfilingLevel(level, options)
5.0 版本中的更改。
对于
mongod
实例,该方法可启用、禁用或配置数据库分析器 。分析器捕获并记录正在运行的mongod
实例上的写入操作、游标和数据库命令性能的数据。如果分析器被禁用,该方法将配置如何将慢操作记录到诊断日志中。注意
使用
db.setProfilingLevel()
对分析级别所做的更改不会保留。当服务器重新启动时,它会恢复为0
(默认值),或者由operationProfiling.mode
设置或--profile
命令行选项设置的值。如果数据库分析器级别 为
1
或2
(具体而言,数据库分析器已启用),则 slowms、sampleRate 会影响分析器和diagnostic log
的行为。如果数据库分析器级别为
0
(具体来说,数据库分析器已禁用),则 Slowms 和 SampleRate 仅影响诊断日志。使用
mongos
实例,该方法设置slowms
、sampleRate
和filter
配置设置,从而配置如何将操作写入诊断日志。您无法在mongos
实例上启用数据库分析器,因为mongos
没有分析器可以写入的任何集合。对于mongos
实例,profile
等级必须为0
。您可以在
mongod
和mongos
实例上指定过滤器,以控制分析器记录哪些操作。当您为分析器指定filter
时,slowms 和 sampleRate 选项不用于分析和慢查询日志行。db.setProfilingLevel()
提供profile
命令的封装器。从 MongoDB 5.0 开始,使用
profile
命令或db.setProfilingLevel()
封装方法对数据库分析器level
、slowms
、sampleRate
或filter
进行的更改记录在log file
中。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
M 0 、M 2和 M 5集群不支持此命令。 有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
db.setProfilingLevel()
方法采用以下形式:
db.setProfilingLevel(<level>, <options>)
参数
Parameter | 类型 | 说明 | ||||||
---|---|---|---|---|---|---|---|---|
整型 | ||||||||
文档或整数 | 可选。接受整数或选项文档。如果将整数值而不是文档作为
|
返回:
该方法返回一个包含先前设置值的文档。
{ "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
也存在时,此字段才会出现在输出中。
注意
filter
和 note
字段仅在先前的级别设置中存在时才会出现在输出中。
要查看当前分析级别,请参阅 db.getProfilingStatus()
。
行为
警告
分析会降低性能,并在系统日志中暴露未经加密的查询数据。在生产部署中配置和启用分析器之前,请仔细考虑对性能和安全的影响。
有关潜在性能下降的更多信息,请参阅分析器开销。
示例
启用分析器并设置慢操作阈值和采样率
以下示例集用于 mongod
实例:
将分析级别设置为
1
,慢速运行阈值 slowms 为
20
毫秒,并且sampleRate 为
0.42
。
db.setProfilingLevel(1, { slowms: 20, sampleRate: 0.42 })
该操作返回一个包含先前设置值的文档。
要查看当前分析级别,请参阅 db.getProfilingStatus()
。
禁用性能分析器并设置慢操作阈值和采样率
下面的示例为 mongod
或 mongos
实例进行了设置:
将分析级别设置为
0
,慢速运行阈值 slowms 为
20
毫秒,并且sampleRate 为
0.42
。
db.setProfilingLevel(0, { slowms: 20, sampleRate: 0.42 })
该操作返回一个包含先前设置值的文档。
要查看当前分析级别,请参阅 db.getProfilingStatus()
。
设置过滤器以确定要进行分析的操作
以下示例集用于 mongod
实例:
db.setProfilingLevel( 1, { filter: { op: "query", millis: { $gt: 2000 } } } )
该操作返回一个包含先前设置值的文档。
要查看当前分析级别,请参阅 db.getProfilingStatus()
。
取消设置筛选器
要清除分析筛选器,请运行带有 filter: "unset"
选项的 db.setProfilingLevel()
。
db.setProfilingLevel( 1, { filter: "unset" } )
该操作返回一个包含先前设置值的文档。
要查看当前分析级别,请参阅 db.getProfilingStatus()
。