代码之家  ›  专栏  ›  技术社区  ›  Ilya Levin

使用索引的MongoDB慢速查询

  •  1
  • Ilya Levin  · 技术社区  · 6 年前

    我使用compose:

    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

    {
        "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 回复  |  直到 6 年前