通过iostat
我可以在每分钟发现一次磁盘写入峰值。我认为这些峰值是由fsync
引起的,因为MongoDB默认情况下每60秒将数据刷新到磁盘。我还可以发现与尖峰一致的慢查询出现在慢查询日志中。
有一个名为storage.syncPeriodSecs的选项,但根据文档:
不要在生产系统上设置此值。几乎在所有情况下,都应使用默认设置。
更频繁地执行fsync可以减少峰值,所以我想知道在生产中更改此值的风险。
我很感激任何想法。
细节:
WiredTiger存储引擎每60秒执行一次checkpoint。听起来您的部署在这些检查点事件期间正在挣扎。如果您正在对可能(可能)配置不足的硬件进行大量写入加载,那么您所看到的这种行为是典型的。
通常不建议在生产环境中更改syncPeriodSecs
值,因为默认值被认为是内存使用,fsync事件数量,崩溃中fsync事件之间丢失数据的可能性以及其他注意事项之间的正确平衡在典型的硬件配置中。
改变这个值可能会使摊位变得更糟。您当然可以通过更改它(更低或更高)来进行一些实验,看它是否可以“平滑”fsync事件。话虽如此,这是一种先进的调整机制,当其他选项不再可用时,最好保留。如果可能的话,这些档位通常可以通过配置更好的硬件来解决,因为看起来当前的硬件在您期望它处理的负载下挣扎。