Назад | Перейти на главную страницу

Запрос Mongo занимает 76 секунд в производстве, но без использования оболочки Mongo

У меня вопрос:

db.content.find({ "$or" : [ { "cik" : "0000764839"} , { "entitiesDetected.ids" : "ZqH9BvtitcYR88NKC"}], "pubDate" : { "$gt" : { "$date" : -2206281600000}}, "orderBy": {"pubDate": -1, "title": 1}}).explain()

Согласно профилю MMS, в производственной среде для возврата данных клиенту требуется 76 секунд.

Но когда я запускаю тот же запрос в оболочке Mongo, я получаю nscanned равным 12, и это очень быстро - 7 мс.

Так что же могло быть не так? Я спросил сотрудников службы поддержки MMS, есть ли что-то очевидное в моем профиле MMS, и они, похоже, не думали, что что-то явно не так. Я в тупике.

Я использую Ubuntu 14.04 на Linode 2048 (два ядра - 2 ГБ оперативной памяти).

Ваш драйвер, вероятно, добавляет подразумеваемые порядки сортировки, выходящие за рамки индексов, особенно если вы используете составные индексы для любого из этих полей. Вам нужно запустить .explain() в запросе вашего приложения, а затем в запросе оболочки mongo и сравните выходные данные двух. Вы также должны сравнить строку журнала, которая записывается, когда приложение выполняет запрос, и когда оболочка делает запрос. Обратите внимание на любые индексы, особенно включая составные индексы, и их порядок сортировки по сравнению с порядком сортировки запроса.