0

我的 mongodb 3.2.18 独立实例有 128GB 内存,wiredTiger,亚马逊 ebs io1 ssd 磁盘 xfs 格式。100% 的工作是写入。我在一个数据库中有 5 个集合,每个集合大约有 8 亿个文档。

对于每 30-60 秒,我刚刚发现 iostat 有 10seconds-15senconds 100% 的磁盘利用率,并且我看到 mongostat aw 的相同数据在 10-15s 左右增加到 20-50 。我不认为我的写入量真的很高,但我想知道这种周期性高磁盘利用率的根本原因是什么。它对我的写入速度影响很大。以下是统计数据。

来自 iostat 的正常统计信息

来自 iostat 的 100% 磁盘利用率

mongostat aw 增加到 40 持续 10 秒

4

2 回答 2

0

虽然这不是一个正确的答案,但简单地发表评论太长了......

过去有许多 JIRA 问题,用户报告了一些类似的行为,这似乎与缓存驱逐有关(请注意,有些是针对早期版本,如 3.0) - 这里只是其中的几个:

您的问题可能与上述问题不是 100% 相同,但我可以想象升级到更新版本的 MongoDB 可能会解决您的问题。此外,可能值得尝试暂时增加您的 AWS 订阅并查看问题是否消失。

于 2017-11-29T20:51:46.523 回答
0

我发现主要原因是更新时集合的“不必要的索引”

我正在使用下面的命令将带有数组列表的用户信息更新到集合 "mongo_user" 中。id_time_dict 是一个带有“post id”和“post time”的字典

db_mongo.mongo_user.update({ "_id": str(user_id) }, { "$addToSet": { "post": {"$each": id_time_dict} } })

我有“post”字段作为索引,这导致从 iotop command 大量读取。通常 25m/s 到 120m/s 的读取加载会导致周期性的 100% 磁盘利用率。删除索引后,通常读取加载为 2-5m/s。

于 2017-11-30T16:31:53.323 回答