Когда диагностируешь медленные запросы MongoDB, начни с включения профайлера базы данных для захвата запросов, превышающих заданный порог:
db.setProfilingLevel(1, { slowms: 100 })
db.system.profile.find().sort({ ts: -1 })
Это сразу выявляет самые медленные операции.
Используй explain() для подозрительно медленных запросов, чтобы изучить план выполнения:
db.collection.find({ field: value }).explain("executionStats")
Ключевые индикаторы для проверки:
COLLSCAN означает полное сканирование коллекции — серьёзный сигнал опасностиIXSCAN подтверждает использование индексаdocsExamined к nReturned говорит о плохой селективностиУбедись, что нужные индексы существуют под твои паттерны запросов. Отсутствующие или неиспользуемые индексы — самая частая причина деградации производительности. Посмотреть существующие индексы можно через db.collection.getIndexes().
Убедись, что рабочий набор данных помещается в оперативную память. MongoDB сильно завязана на кэш WiredTiger — если данные не влезают в доступную память, дисковый I/O резко возрастает. Посмотреть статистику кэша можно через:
db.serverStatus().wiredTiger.cache
Проверь наличие конфликтов блокировок с помощью db.serverStatus().locks. Долгие операции записи могут блокировать чтение и снижать общую пропускную способность.
Посмотри утилизацию пула соединений, чтобы выявить исчерпание ресурсов. Слишком много одновременных соединений могут ставить запросы в очередь и увеличивать задержку.
Наконец, изучи метрики инфраструктуры:
Систематический подход — профайлер → план выполнения → индексы → память → блокировки → метрики системы — последовательно сужает причину любой проблемы с производительностью MongoDB.
Стадия выполнения COLLSCAN указывает на то, что MongoDB использует индекс для сканирования только необходимых документов, что является наиболее эффективным путём выполнения запроса.
Новый — ещё не проверен сообществом
Вы