1

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

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

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

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

我会很感激任何想法。

细节:

  • MongoDB 版本:3.2.16

  • 存储引擎:WiredTiger

  • 高峰期间的缓慢查询:其中几个,大约 1 秒。不停止服务器

  • 部署:分片集群。具有两个成员(主要 + 次要)的副本集

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

4

1 回答 1

1

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

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

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

于 2018-09-17T01:36:02.393 回答