我正在使用db.setProfilingLevel(1, 1000)
为每个数据库设置配置文件级别。我看到可以为每个数据库设置级别,但这slowms
是一个全局状态。有没有办法为每个单独的数据库设置这个值?
如果我不能为每个单独的数据库设置它,为什么有一种方法db.setProfilingLevel(level, slowms)
接受第二个参数作为slowms
. 看起来这个参数是全局值而不是数据库值。令人困惑的是,此方法专门用于设置单个数据库配置文件级别,但由于某些原因,它还在全局设置中设置了 slowms。
setProfilingLevel 实际上影响两件事。第一个参数(级别)告诉系统何时写入配置文件集合(0-从不,1-仅当慢于 slowms 或 2-始终)。第二个参数(slowms)实际上总是影响所有数据库的系统日志输出。因此,使用 db.setProfilingLevel(0,-1),不会将任何内容写入配置文件集合,但(所有数据库的)所有查询都会写入 mongod.log
MongoDB High Availability
根据@Afshin Mehrabani
& MongoDB BOL here的 MongoDB 文档要为 MongoDB 启用分析,您可以使用以下函数:
在哪里
level
- 这是指分析的详细级别slowms
- 这是可选的。它用于定义以毫秒为单位的慢速操作阈值。以下命令是在 mongo 交互式 shell 中发出处理函数的示例:
因此,处理命令启用级别 1 和阈值 1000 毫秒的 MongoDB 实例分析。
此命令在 mongo shell 中的输出如下所示
MongoDB 引擎支持三个主要级别的配置。下表显示了三个不同级别的分析:
使用第一级分析时,数据库的分析器不会保存任何与操作相关的信息。使用 level
1
,探查器记录缓慢的操作。有一个设置参数定义了慢速操作阈值。使用
slowOpThresholdMs
配置参数,您可以定义慢速操作的阈值。然后,探查器记录执行时间比定义值慢的操作。要定义
slowOpThresholdMs
参数,您可以使用配置文件来定义值,也可以将值传递给setProfilingLevel
函数的第二个参数。通过使用 level
2
of profiling ,分析器记录所有操作而不考虑任何条件。要更好地理解此函数的结构,请考虑以下命令:
发出上述命令后,数据库分析器会记录所有执行时间大于 1000 毫秒的操作。
注意:使用探查器会对性能产生负面影响,因为探查器会记录部分或整个数据库操作的冗余。建议将其关闭,除非您需要诊断数据库。
system.profile
配置分析器引擎后,您可以使用集合从数据库中查询日志。根据此处的 MongoDB Jira 博客,slowms 常量不是针对每个数据库的,而是针对进程范围的。
请注意测试数据库中的 slowms 是如何达到 2 的……这并不好。
由于此处关闭不会修复,但如果 db.setProfilingLevel 的语法更改为仅影响单个数据库,则需要使用语法来全局设置 slowms 是什么(无需使用新的 slowms 设置重新启动 mongod)。
请注意,所提议的这一更改向后打破了我们的支持人员给出的每条指令,这些指令目前被认为具有全球影响。
建议我们考虑非向后中断语法,例如
db.setProfilingLevel(0,1,false)
最后一个参数是“applyGlobally”并且默认情况下为 true。(或仅限 applyToCurrentDB,默认情况下为 false)。如需进一步参考此处和此处