MongoDB小集合查询很慢

Posted

技术标签:

【中文标题】MongoDB小集合查询很慢【英文标题】:MongoDB small collection Query very slow 【发布时间】:2015-10-21 16:41:34 【问题描述】:

我有一个 33MB 的集合,其中包含大约 33k 项。在过去的一个月里,这一直运行良好,查询响应迅速,没有慢查询。该集合具有所有必需的索引,通常响应几乎是即时的(1-2ms)

今天我发现有一个主要的查询队列,请求没有得到处理。 Oplog 正在填满,只是没有清除。经过一番搜索,我发现下面的帖子建议压缩和数据库修复。我进行了维修,它解决了问题。 Ridiculously slow mongoDB query on small collection in simple but big database

我的问题是集合可能出了什么问题,databaseRepair 是如何解决问题的?有没有办法让我确保不再发生这种情况?

【问题讨论】:

您多久删除和更新一次集合的文档以及您使用什么更新它们? 【参考方案1】:

这里有很多问题可能会成为问题,但最终如果维修/紧凑型解决了您的问题,则表明存在与存储相关的问题。以下是一些跟进的建议:

磁盘性能:确保您的磁盘运行正常并且没有坏扇区。如果您的磁盘的一部分已损坏,它可能会导致访问时间增加,您可能会再次遇到这种情况。您可能还想测试您的 RAM 模块。

碎片化:在不知道您的写入配置文件的情况下很难说,但是您的集合和索引可能已经在您的整个存储系统中碎片化了。运行修复将重建它们并将它们恢复为更连续的形式,从而使您的磁盘访问时间更快,尤其是在您使用机械磁盘并且要访问磁盘以获取大量数据时。

如果这是问题所在,那么您可能需要调整您的 paddingFactor 以减少将来发生这种情况的频率,特别是如果您的更新会随着时间的推移而增加文档的大小。 (假设您使用的是 MMAPv1 存储)。

页面错误:我假设您可能已关闭系统进行修复,这可能已重置您的内存/工作集。您可能希望监视硬页面错误,这些错误表明您的查询受到 IO 的瓶颈,而不是由内存中的工作集提供服务。如果情况一直如此,您的应用程序行为可能会随着数据被推入和推出内存而发生意外变化,您可能需要添加更多 RAM。

【讨论】:

以上是关于MongoDB小集合查询很慢的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb聚合——排序让查询变得很慢

mongodb创建索引很慢怎么办

MongoDB 索引

Spring Boot:如果不存在,则在启动时在 mongodb 中创建文档

MongoDB $match $group 查询慢

MongoDB02MongoDB索引及复制