更改冲洗频率的风险

时间:2018-09-10 09:19:07

标签: mongodb performance flush database-tuning fsync

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

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

  

请勿在生产系统上设置此值。在几乎每种情况下,都应使用默认设置。

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

我将不胜感激。

详细信息:

  • MongoDB版本: 3.2.16

  • 存储引擎:WiredTiger

  • 高峰期间的查询速度很慢:其中一些大约1秒。 不停止服务器

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

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

1 个答案:

答案 0 :(得分:1)

WiredTiger存储引擎每60秒执行一次checkpoint。听起来您的部署在这些检查点事件中很挣扎。如果您正在(可能)配置不足的硬件上进行大量写负载,那么您所看到的这种现象很典型。

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

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