mongodb - 使用索引的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% 使用一个处理器,并且不使用它能够使用的内存:
考虑到所有索引的总和约为 2.7Gb,我不明白为什么 MongoDB 在需要时不能将其上传到 RAM。这种情况是正常行为吗?有什么方法可以提高性能吗?谢谢。
解决方案
推荐阅读
- node.js - 对 Telegram 机器人菜单进行编程的更智能、更简单的方法
- php - 从内部数组中选择特定字段
- javascript - Express-替代重定向
- python - scrapy管道到带有汉字的JSON
- c# - (transform.position C#) 简单命令,意外响应
- c++ - 程序可以在 Mac 上编译,但不能在 Linux 上编译。获取错误:从初始化列表转换为
- python - 已安装 uWSGI,但未在 Python 中导入
- c++ - 通过这种方式定义一个对象 - Test object();
- c++ - 如何添加概率?
- linux - sed - 没有这样的文件或目录