我可以禁用日志以提高性能吗

Pad*_*oll 5 mongodb

我们有一个运行在 AWS 上的 16 个分片的 MongoDB 2.4 安装正在吃钱。

  • 数据是不稳定的,它只会在创建后的 15 分钟内使用
  • 如果集群出现故障,我们将其清除并重新启动 ~ 30 秒停机时间

我注意到大部分磁盘压力似乎是日记

有什么原因我不能禁用日记功能吗?

Ada*_*m C 9

应该注意的是,在任何具有大量写入量的 MongoDB 系统上,大部分连续/正在进行的磁盘使用将来自日志——毕竟它每 100 毫秒同步到磁盘——所以这种观察并不罕见。

如果你真的可以在 30 秒内清除 16 个分片并恢复(这令人印象深刻),那么你可以以最小的风险消除日志,是的,但你也可以不那么激烈。但是,在您这样做之前,请考虑删除日志意味着非干净重启mongod会使您的数据处于未知状态(可能没问题,也可能没有)。如果您在此模式下运行,您将希望确保您有方法检测任何差异(可能不会表现为中断)。

还值得注意的是,这本质上是一种不受支持的生产操作模式,因此获得有关问题的任何帮助可能意味着必须重新打开日志记录。

最后,在你关闭日志之前,先考虑一下这些不太激烈的步骤:

  1. 将日志移动到它自己的磁盘/卷 - 这是一个标准的预写日志,意味着顺序写入 - 与通常的数据写入非常不同,因此将它放在自己的磁盘/卷上可以显着提高效率,特别是如果您的其他 IO 是更随机分布(常见于 MongoDB)。最后,在写这篇文章时,你永远不应该在 NFS 挂载上安装日志——它不能很好地运行(可能不适用于这里,但一般来说是好的建议)。
  2. 更改日志的提交间隔 - 默认为 100 毫秒,但您可以增加到 300 毫秒(请参阅此处文档) - 这是一个小调整,但可能会有所帮助
  3. 尽管它与日志没有直接关系,但其他竞争写入将来自数据的 fsync 进程(默认情况下每 60 秒一次)。如果你改变它,你也可以提高性能并消除磁盘​​的压力。同样,请参阅有关 syncdelay文档了解详细信息。
  4. 看看你是如何写入数据的——有时大型数组更新、大型或不需要的索引等可能会转化为比它们应该更多的写入。