代码之家  ›  专栏  ›  技术社区  ›  Antonio Val

更改刷新频率的风险

  •  0
  • Antonio Val  · 技术社区  · 6 年前

    通过 iostat 我每分钟可以发现一次磁盘写入峰值。我认为这些尖峰是由 fsync ,因为MongoDB默认每60秒将数据刷新到磁盘。

    有一个选项叫做 storage.syncPeriodSecs 但根据文件:

    不要在生产系统上设置此值。在几乎所有情况下,都应该使用默认设置。

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

    如果你有什么想法,我将不胜感激。

    细节:

    • MongoDB版本: 3.2.16

    • 存储引擎:WiredTiger

    • 峰值期间的慢速查询:其中几个,大约1秒。

    • 规格:CPU 8核,内存64GB,SSD盘

    1 回复  |  直到 6 年前
        1
  •  1
  •   kevinadi    6 年前

    checkpoint 每60秒。听起来您的部署在这些检查点事件中遇到了困难。如果您正在对(可能)资源调配不足的硬件进行大量写负载,那么您看到的这种行为是典型的。

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

    更改此值可能会使失速更糟。当然,您可以通过更改它(低或高)来做一些实验,看看它是否可以“平滑”fsync事件。尽管如此,这是一种高级的调优机制,在其他选项不可用时最好保留。如果可能的话,像这样的暂停通常可以通过提供更好的硬件来解决,因为当前的硬件似乎在您期望它处理的负载下挣扎。