为什么我的 MongoDB 查询非常非常慢?

为什么我的 MongoDB 查询非常非常慢?

我在工作中继承了一个大型 MongoDB 服务器,并被要求弄清楚为什么针对它运行的查询如此缓慢。数据库包含大量记录(大约 10^9),占用约 300 GiB。起初,我认为记录的原始数量可能是罪魁祸首,所以我在适当的字段上设置了索引。它对搜索数据库中的条件的查询有很大帮助,但对于没有匹配项的查询则需要 80-90 分钟。有什么关于如何解决这个问题的想法吗?

答案1

似乎您缺少一个重要的索引,特别是因为没有匹配项的查询比有匹配项的查询花费的时间更长。这是什么类型的查询?也许您需要复合索引?您是否将其用作where查询的一部分?

我不是 MongoDB 专家,但 80-90 分钟绝对不正常。我不知道 Arenstar 觉得 MongoDB 听起来像什么,但它已被证明可以处理数十亿份文档(数 TB 的数据)

答案2

现在回答这个问题可能太晚了,但我认为值得一提。有像 mongostat 这样的工具可以用来查看实际发生了什么。索引未命中次数太多,页面错误次数太多。如果您正在同时运行读写操作,那么您还应该查看锁定百分比。300 GB 对于 mongodb 来说并不是一个很大的容量。它很容易超过这个容量。

其他有用的命令:

    db.stats();
    db.currentOp();

答案3

看着那(这MongoDB 数据库分析器页面,特别是关于优化查询性能

答案4

MongoDb 是网络规模的。抱歉,不得不这么说。

没有匹配可能需要一段时间,也许是基于范围扫描???

我会把它分解开来。Mongo 听起来不像是一个可以处理 300gb 的数据库,而且可能还不够成熟,不知道它如何处理大量数据。

您出于什么原因使用 Mongo?

相关内容