MongoDB. Почему запросы по индексу выполняются так медленно?

Всем привет.

Прошу помощи в решении следующей проблемы:
Есть коллекция размером 26 млн документов.
Структура документа фиксированная - pastebin.com/iBzW0Fkz
По коллекции построен индекс по полю users - db.conversations.getIndexes() - pastebin.com/xHecpw00

Запросы по полю users выполняются медленно (больше 100 мс)
db.getCollection('conversations').find({users: {$all: ["5942328", "9082468"]}}); EXPLAIN - pastebin.com/0C11Cr9F
db.getCollection('conversations').find({users: "9163099"}); EXPLAIN - pastebin.com/CmvuDf10

Вопросы:
1. Почему запросы по индексу выполняются так медленно?
2. Как прогреть(загрузить в ОЗУ) индексы после рестарта сервера/процесса mongod? В WiredTiger команду touch() убрали.

Дополнительная информация по коллекции и базе данных:
db.stats() - pastebin.com/9JZF8ChQ
db.getCollection('conversations').stats() - pastebin.com/17yV4Fsi
db.conversations.getIndexes() - pastebin.com/xHecpw00

Информация о сервере:
lscpu - pastebin.com/k7wUE4gH
lshw -short - pastebin.com/w5XYuY3U

Есть предположение что чтение с HDD работает очень медленно и решением будет установка SSD, но нужно явное подтверждение этого.
  • Вопрос задан
  • 508 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lega
Попробуйте выбрать не весь документ:
db.conversations.find({users: "9163099"}, {_id: 1})
или
db.conversations.find({users: "9163099"}, {users: 1})


Что free -m выдает?

Есть предположение что чтение с HDD работает очень медленно и решением будет установка SSD, но нужно явное подтверждение этого.

Я бы на вашем месте купил бы VPS в DO на пол часа, и проверил бы, - стоит копейки (5-30 руб) и дело минутное* (может проблема не только в HDD), если это hetzner то все понятно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы