我的mongodb 3.2.18独立实例有128GB ram,wiredTiger和amazon ebs io1 ssd disk xfs格式。 100%的工作是写作。我在一个数据库中有5个集合,每个集合有大约8亿个文档。
每30-60秒,我发现iostat有10秒-15秒100%的磁盘利用率,我看到mongostat aw的相同数据增加到20-50,大约10-15s。我不认为我的写入变得非常高,但想知道这种周期性高磁盘利用率的根本原因是什么。它影响了我的写作速度很多。以下是统计数据。
答案 0 :(得分:0)
虽然这不是一个正确的答案,但只是简单地发表评论太长了......
过去有很多JIRA问题,用户报告的行为有点类似,似乎与缓存驱逐相关(请注意,有些版本是早期版本,如3.0) - 这里只是其中的几个:
您的问题可能与上述问题完全不同,但我可以想象升级到更新版本的MongoDB可能会解决您的问题。此外,可能值得尝试临时增加您的AWS订阅并查看问题是否消失。
答案 1 :(得分:0)
我发现主要原因是"不必要的索引"更新时的集合
我正在使用下面的命令将一个数组列表的用户信息更新到集合" mongo_user" 。 id_time_dict是一个带有" post id"的字典。和"发布时间"
db_mongo.mongo_user.update({" _id":str(user_id)},{" $ addToSet":{" post":{&#34 ; $ each":id_time_dict}}})
我有"发布" field作为索引,导致iotop命令的重读。通常25m / s到120m / s的读取负载导致周期性的100%磁盘利用率。删除索引后,通常读取加载量为2-5m / s。