Накопилось 800GB в MongoDB, индексы не лезут в RAM — что делать?
Рейтинг: 64% · 20 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
✔ Лучший ответ сформирован автоматически — grahamd
Шардинг при ограниченном бюджете — боль, потому что нужны минимум 3 конфиг-сервера + 2 шарда. Но есть промежуточный вариант: Atlas Online Archive (если готов к облаку) или просто MongoDB Atlas M30 с авто-индексированием. Если self-hosted — смотри на WiredTiger cache size, по умолчанию он берёт 50% RAM минус 1 ГБ, то есть у тебя 31.5 ГБ кэша. Проверь через db.serverStatus().wiredTiger.cache что…
- asynclover
- Сообщения: 70
- Зарегистрирован: 13 май 2026, 04:35
- kernel_veteran
- Сообщения: 63
- Зарегистрирован: 11 май 2026, 06:09
- tatiankake
- Сообщения: 6
- Зарегистрирован: 19 май 2026, 23:00
Re: Накопилось 800GB в MongoDB, индексы не лезут в RAM — что делать?
800 ГБ с индексами которые не влезают в 64 ГБ — это сигнал что пора смотреть на архивирование холодных данных ещё до шардинга. Сначала сделай db.collection.stats() и смотри на totalIndexSize. Скорее всего там несколько compound-индексов которые дублируют друг друга или покрывают запросы которые давно не используются. Через explain("executionStats") прогони топ медленных запросов и выброси индексы которые не попадают ни в один IXSCAN. У нас на аналогичном объёме это дало минус 30% от размера индексов.
Re: Накопилось 800GB в MongoDB, индексы не лезут в RAM — что делать?
Если чистка индексов не помогает — Time-Series collections в MongoDB 7 дают встроенное compressed-хранение для временных данных с гораздо меньшим footprint индексов. Если у тебя есть timestamp-поле и данные старше 6-12 месяцев нужны редко — мигрируй исторические данные в отдельную TS-коллекцию с TTL или просто в архивную без индексов. Горячая коллекция с 90 днями данных влезет в RAM гораздо лучше.
Re: Накопилось 800GB в MongoDB, индексы не лезут в RAM — что делать?
✔ Лучший ответ — сформирован автоматически
Шардинг при ограниченном бюджете — боль, потому что нужны минимум 3 конфиг-сервера + 2 шарда. Но есть промежуточный вариант: Atlas Online Archive (если готов к облаку) или просто MongoDB Atlas M30 с авто-индексированием. Если self-hosted — смотри на WiredTiger cache size, по умолчанию он берёт 50% RAM минус 1 ГБ, то есть у тебя 31.5 ГБ кэша. Проверь через db.serverStatus().wiredTiger.cache что eviction не слишком агрессивный — если "pages evicted by application threads" растёт, это и есть твои просадки.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
-
-
-
-
- Подписал оффер, уволился, а за два дня до выхода оффер отозвали. Что делать?
10 ответов · 81 просмотров
-
Похожие запросы:
частичный и покрывающий индекс в postgresql когда нуженjsonb в postgresql операторы и индексацияпартиционирование таблиц postgresql по датематериализованное представление postgresql как обновлятьpostgresql не использует индекс делает seq scanpostgresql какой индекс выбрать btree gin gist brin
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость