我是否应该在生产机器中禁用 MongoDB 分析器?

我是否应该在生产机器中禁用 MongoDB 分析器?

根据[1]的默认设置,当执行时间> 100ms时收集配置文件数据

但其中一个问题是,当大多数查询的执行时间 > 100 毫秒时,我们的系统开始超载,我不确定分析器是否会让我们的系统更加繁忙。

我正在考虑禁用或设置一个较大的值,例如 2 秒。默认值 100 毫秒似乎太小了?

[1]http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/

答案1

首先,默认情况下,分析器处于关闭状态。慢查询(默认情况下,即任何耗时超过 100 毫秒的查询,如您所说)将记录到 MongoDB 日志中,但这与分析器不同,不会占用大量资源(它本质上只是将一行文本写入数据库外部的文件中,没有锁定等)。通常,保持原样是安全的,并且发现慢查询的好处通常远远超过拥有更大日志文件的缺点。

其次,启用分析器后,它会将收集的所有数据写入集合system.profile。在默认级别 0 下,它处于禁用状态;在级别 1 下,它会根据相同的限制记录所有“慢速”操作;在级别 2 下,它会记录所有操作,无论速度如何。

可以想象,将其设置为 2 会非常耗费资源 - 您将使写入量加倍,并且每次读取都会增加一次写入。根据您的工作量,级别 1 也可能非常耗费资源。一般来说,我建议仅在受控情况下(维护窗口、调试、开发/QA 环境)使用分析器。

虽然你可以认为这两种记录慢速操作的方法完全不同,但目前slowms 值将会对两种方法产生影响,即什么被视为慢速查询。

因此,如果您将该值设置得更高(2 秒),则会减少写入日志的操作量。这样做的缺点是,您将错过所有耗时的操作,这在现代数据库术语中通常被认为是永恒的。100ms 值通常是一个不错的起点,我甚至看到有人根据他们的应用程序对超时的要求降低该值,但很少值得增加该值。

答案2

分析器从 mongodb 获取资源!它必须对查询进行计时并将其写入 mongodb.log。

如果您根本不需要,您可以安全地禁用它。

相关内容