Я унаследовал большой сервер MongoDB на работе, и мне было поручено выяснить, почему запросы к нему выполняются так медленно. БД содержит тонны и тонны записей (порядка 10 ^ 9) и занимает около 300 ГиБ. Сначала я подумал, что причиной может быть необработанное количество записей, поэтому я установил индексы для соответствующих полей. Это очень помогло для запросов, которые искали критерии, которые были в БД, но потребовало от 80 до 90 минут для запросов, по которым не было совпадений. Есть идеи, как с этим справиться?
Кажется, что вам не хватает важного индекса, тем более что запрос без совпадений занимает гораздо больше времени, чем запрос с совпадениями. Что это за тип запроса? Может вам нужен составной индекс? Ты используешь where
как часть запроса?
Я не специалист в MongoDB, но 80-90 минут - это абсолютно ненормально. Я не знаю, как MongoDB «звучит» для Arenstar, но было показано, что он обрабатывает миллиарды документов (терабайты данных).
Возможно, сейчас уже слишком поздно для ответа, но я подумал, что об этом стоит упомянуть. Существуют такие инструменты, как mongostat, которые можно использовать, чтобы увидеть, что на самом деле происходит. Слишком много пропусков индекса, слишком много ошибок страниц. Если вы выполняете одновременные операции чтения и записи, вам также следует проверить процент блокировки. 300 ГБ - небольшой объем для mongodb. Это может легко пойти намного дальше.
Другие полезные команды:
db.stats();
db.currentOp();
Посмотрите на Страница профилировщика базы данных MongoDB, особенно раздел о Оптимизация производительности запросов.
MongoDb является веб-масштабируемым .. Извини, что пришлось сказать ..
Нет совпадений, вероятно, займет некоторое время на основе, возможно, сканирования диапазона ???
Я бы сломал это .. Mongo не похоже на БД для обработки 300 ГБ, и, вероятно, еще недостаточно зрел, чтобы знать, как он действует с большими объемами данных ..
По какой причине вы используете Mongo ??