Доброго дня. Уже недельку ищу решение проблемы медленного курсора, и

чего то не возьму в толк. Есть у меня коллекция на 500к элементов, хочу из нее вытащить 25-40к записей, и отдать их на клиента.

Стенд - репликасет (1 master 2 replica) 4.4.2 в докере на одном хосте.

Запрос банален
testmodel.find({
"resourceType": "virtualMachine"
})
Пробовал монгусом, и стандартным mongodb в nodejs разница на уровне погрешности. Результат запроса удручающий, 3-5 секунд.
Понимаю, что все тупит, именно из за сетевых задержек, т.к разворачивая в docker-compose на локальной машине точно такой же конфиг время работы = 250ms стабильно.

Попробовал tcpdump пить трафик с хостов на себя и смотреть ответы, вижу что ответы летят пачками по 10-12 записей (движения курсора?)

Вопрос.
Разве это не нормально, хотеть вытащить из базы 25к элементов? Я много хочу? Монга так не работает?

У меня явное ощущение, что я чего то в розетку не включил, и оно просто не работает.

Пробовал строить индексы по этому полю, реиндексить, и тд. эффекта 0.
Пытался крутить batchSize до 100 в нативном клиенте эффекта не заметил (tcpdump показывает все те же 10-12 записей)
Крутил коннекшен пул, тоже без результата.

Документы мелкие, 5 полей, тестом рандомом наполнил, выглядят вот так.
{
"_id" : ObjectId("5fe256cff6accd21a13e9155"),
"team" : "7LWNfcrf",
"resourceName" : "mk5CU5BdmfHtuUA8KRU22CfrMzIkRSJ09yPl",
"resourceType" : "virtualMachine",
"storeSize" : 3599942,
"reportId" : "c510f214-79de-4e12-b725-2af120a50003",
"__v" : 0
}

Находил пару вопросов по перформансу cursor в интернете, но также без ответов и рекомендаций.

https://dba.stackexchange.com/questions/193708/aggregation-vs-cursor-for-reshaping-mongodb-documents

https://forums.meteor.com/t/iterating-over-mongo-cursor-too-slow-server-side/19531/10

https://stackoverflow.com/questions/31357025/mongodb-cursor-iteration-performance-issue


Офицальные гайды по оптимизации запросов молчат на эту тему.
Может кто сталкивался, подскажет куда копать. Или я может чего не так делаю?

8 ответов

14 просмотров

А какой итоговый размер джсона, который вы получаете через 3-5 секунд?

Vladimir-Lila Автор вопроса

Покажите пожалуйста explain({executionStats:1}) для вашего запроса

Vladimir-Lila Автор вопроса
yopp 💉💉
Покажите пожалуйста explain({executionStats:1}) дл...

Вот executionStats: { executionSuccess: true, nReturned: 25001, executionTimeMillis: 37, totalKeysExamined: 0, totalDocsExamined: 75003, executionStages: { stage: 'COLLSCAN', filter: [Object], nReturned: 25001, executionTimeMillisEstimate: 3, works: 75005, advanced: 25001, needTime: 50003, needYield: 0, saveState: 75, restoreState: 75, isEOF: 1, direction: 'forward', docsExamined: 75003 }, allPlansExecution: [] },

Vladimir Lila
Вот executionStats: { executionSuccess: true...

Если я не ошибаюсь то тут nReturned = totalDocsExamined должен быть. если не равно, то означает что индекс построин не правильно или же его вообще нету.

Vladimir-Lila Автор вопроса
Дара
Если я не ошибаюсь то тут nReturned = totalDocsExa...

Все так, индекса не было, но как я говорил, не многое меняется, если его добавить

Vladimir-Lila Автор вопроса
Дара
Если я не ошибаюсь то тут nReturned = totalDocsExa...

Вот теперь explain executionStats: { executionSuccess: true, nReturned: 25001, executionTimeMillis: 30, totalKeysExamined: 25001, totalDocsExamined: 25001, executionStages: { stage: 'FETCH', nReturned: 25001, executionTimeMillisEstimate: 5, works: 25002, advanced: 25001, needTime: 0, needYield: 0, saveState: 25, restoreState: 25, isEOF: 1, docsExamined: 25001, alreadyHasObj: 0, inputStage: [Object] }, allPlansExecution: [] },

Vladimir Lila
Вот executionStats: { executionSuccess: true...

Вы говорите что у вас коллекция на 500 тысяч документов, но в статистике планировщика: docsExamined: 75003

Похожие вопросы

Обсуждают сегодня

Подскажите, а есть vault lite или ченить такое?) А то нужен вольт для похода в вольт, но весит он ~500 мб) как-то многовато для парочки запросов ))
Alexandr Orloff
17
Всем привет, есть небольшая проблема Есть такой скрипт document.addEventListener('DOMContentLoaded', function () { const sliderTabs = document.querySelectorAll('.s...
A da
8
@go1337 @dblackCat Привет. Все ещё дрочусь с fastpanel. Добавил второй домен который должен смотреть в рут того же сайта, но так как это просто домен, а не сайт, я не могу ему...
Ross 🦴
9
До речі, в ево нема можливості чи якого розширення щоб з адмінки з телефона зайти і терміново щось в верстці поправити?
Женя
7
кто-нибудь пользуется тайм-трекерами во время работы? так много разных нагуглил, может есть что-то популярное
Lencore
8
Пацаны. Я разрабатываю софт для инвайтинга на телетон, и столкнулся с такой проблемой, в один из чатов не могу приглашать никого, не дает добавлять, в то же время через официа...
Kernel Panic
11
Скажите, а кому нужен Currency как отдельный плагин вместо полноценного ecommerce в OctoberCMS? Кто-то использует его уже или планирует в будущем? Может я что-то не понимаю?
Igor
13
Розмовами про Рево мені нагадали часи, коли шаблони правилися прямо в адмінці. Хто в курсі, чому відійшли від цієї практики, так блейд не працює? Доволі зручно ж було (інколи)
Женя
3
Всем добрый вечер, Рад оказаться в кругу единомышленников. Начинаю погружаться в мир .net веба. Зовут Ерасыл 🖖 У меня назрел вопрос: Какой процент проектов, прошедшие через в...
Ерасыл
6
Чому? Да тому що без GiT не уявляю нормального проекта а коли код в базі то то так собі
Dmytro Lukianenko
3
Карта сайта