У меня MongoDB работает в Docker-контейнере с использованием 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
определяет местонахождение каталога хост-машины, и это обычный жесткий диск (не 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,7 Гб, я не понимаю, почемуMongoDB не может просто загрузить его в RAM, если это необходимо.Это нормальное поведение в этой ситуации и есть ли способы улучшить производительность?Спасибо.