MongoDB使用索引的慢查询

时间:2018-12-10 15:19:01

标签: mongodb bigdata database-performance

我使用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 query top

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

0 个答案:

没有答案