改变冲水频率的风险

Risks of changing flushes frequency

通过 iostat 我发现磁盘写入每分钟出现一次峰值。我认为这些峰值是由 fsync 引起的,因为 MongoDB 默认情况下每 60 秒将数据刷新到磁盘。 我还可以发现与慢速查询日志中出现的峰值一致。

有一个名为 storage.syncPeriodSecs 的选项,但根据文档:

Do not set this value on production systems. In almost every situation, you should use the default setting.

更频繁地执行 fsync 可以减少尖峰,所以我想知道在生产中更改此值的风险。

如有任何想法,我将不胜感激。

详情:

WiredTiger 存储引擎每 60 秒执行一次 checkpoint。听起来您的部署在这些检查点事件中举步维艰。如果您正在(可能)配置不足的硬件中执行大量写入负载,那么您看到的这种行为是典型的。

通常不建议在生产环境中更改 syncPeriodSecs 值,因为默认值被认为是内存使用、fsync 事件数、丢失数据的可能性之间的正确平衡崩溃中的 fsync 事件,以及典型硬件配置中的其他注意事项。

更改此值可能会使摊位变得更糟。您当然可以通过更改它(更低或更高)来做一些实验,看看它是否可以 "smooth out" fsync 事件。话虽如此,这是一种高级调整机制,最好在其他选项不再可用时保留。如果可能的话,通常可以通过提供更好的硬件来解决像这样的停顿,因为当前的硬件似乎在您期望它处理的负载下苦苦挣扎。