首页 > 解决方案 > 使用索引的MongoDB慢查询

问题描述

我使用 compose 在 docker 容器中运行 MongoDB:

mongodb:
image: mongo:4
ports:
  - "27017:27017"
restart: always
command: --wiredTigerCacheSizeGB=10
environment:
  MONGO_INITDB_ROOT_USERNAME: ${MONGODB_USER}
  MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_USER_PASS}
volumes:
  - ${MONGODB_DATADIR}:/data/db

MONGODB_DATADIR定位到主机目录,它是一个普通的硬盘驱动器(不是SSD)。在我的数据库中,我有一个包含一些文档的集合。有一些统计数据:

{
    "ns" : "domains.domains",
    "size" : 5679596048.0,
    "count" : 38396115,
    "avgObjSize" : 147,
    "storageSize" : 1884860416.0,
    "capped" : false,
    "wiredTiger" : {
        ...
    },
    "nindexes" : 7,
    "totalIndexSize" : 2701312000.0,
    "indexSizes" : {
        "_id_" : 387567616,
        "URL_1" : 1452449792.0,
        "checkedBySEO_1" : 187138048,
        "checkedByUclassify_1" : 184221696,
        "is_alive_1" : 184528896,
        "SEO_in_batch_1" : 176033792,
        "uclassify_in_batch_1" : 129372160
    },
    "ok" : 1.0
}

如您所见,我的收藏中有几个索引。我想做的就是使用索引通过简单的查询来计算文档。像这样:db.getCollection('domains').find({"checkedByUclassify":false}).count();。而且需要10多秒才能完成。MongoDB 100% 使用一个处理器,并且不使用它能够使用的内存: MongoDB查询顶部

考虑到所有索引的总和约为 2.7Gb,我不明白为什么 MongoDB 在需要时不能将其上传到 RAM。这种情况是正常行为吗?有什么方法可以提高性能吗?谢谢。

标签: mongodbbigdatadatabase-performance

解决方案


推荐阅读