В моем приложении Meteor есть функция, которая выполняет некоторые операции с документами. Сначала он выбирает данные, выполняет некоторые настройки на стороне сервера, а затем снова обновляет свойства документа. Иногда мне нужно запустить его на многих документах (тысячи, до 250 тыс.).
Нормальная скорость составляет менее 2 с для 1000 документов (извлекайте документы один за другим, и после некоторой локальной обработки данных обновление выполняется по одному; пакетных обновлений нет, поэтому оно выполняется довольно быстро). Но если веб-сервер некоторое время работал, а пользователи вошли в систему, эта функция может длиться вечно (например, 160 с для 1000 документов).
Я должен выйти из системы всех пользователей (db.users.update ({}, {$ set: {"services.resume.loginTokens": []}}, {multi: true})), чтобы вернуть скорость , После запуска запроса к БД скорость выполнения возвращается к ~ 2 с / 1000.
В чем проблема? Это не должно быть связано с индексом, так как это будет намного медленнее. Кроме того, на стороне БД нет журналов, указывающих на то, что БД является проблемой, и БД не имеет высокой загрузки ЦП. Хотя веб-сервер работает на 100% (за исключением этого, веб-сервер никогда не достигает даже 15%).
Веб-сервер AWS T2.small, и количество зарегистрированных пользователей (они все равно бездействуют, как я это делаю ночью) составляет около 10. У них есть несколько открытых подписок, я полагаю.