Всем привет.
Прошу помощи в решении следующей проблемы:
Есть коллекция размером 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, но нужно явное подтверждение этого.