У меня есть простой запрос, который использует индекс:
db.data.find({'w.em': 'testquery'}).explain();
Вот запрос explain
:
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "data",
"indexFilterSet" : false,
"parsedQuery" : {
"w.em" : {
"$eq" : "testquery"
}
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"w.em" : 1
},
"indexName" : "w.em_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"w.em" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"w.em" : [
"[\"testquery\", \"testquery\"]"
]
}
}
},
"rejectedPlans" : []
},
"serverInfo" : {
"host" : "******",
"port" : ******,
"version" : "3.4.23",
"gitVersion" : "324017ede1dbb1c9554dd2dceb15f8da3c59d0e8"
},
"ok" : 1.0
}
Здесь размер индекса:
db.data.totalIndexSize(); // 738562048 ~700MB
Он работает на сервере с 8 ГБ ОЗУ, поэтому я предполагаю, что у него есть место для хранения индексов в ОЗУ, как они предложили здесь:
https://docs.mongodb.com/manual/tutorial/ensure-indexes-fit-ram/
Коллекция составляет ~ 4 ГБ ... и простой запрос, который я написал ранее, с использованием IXSCAN, занимает 16 секунд!
Как я могу определить узкое место?