Накопилось 800GB в MongoDB, индексы не лезут в RAM — что делать?
Рейтинг: 64% · 20 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- asyncgo9533
- Сообщения: 5
- Зарегистрирован: Чт май 14, 2026 10:57 pm
✔ Лучший ответ сформирован автоматически — kirill_net
Шардинг при ограниченном бюджете — боль, потому что нужны минимум 3 конфиг-сервера + 2 шарда. Но есть промежуточный вариант: Atlas Online Archive (если готов к облаку) или просто MongoDB Atlas M30 с авто-индексированием. Если self-hosted — смотри на WiredTiger cache size, по умолчанию он берёт 50% RAM минус 1 ГБ, то есть у тебя 31.5 ГБ кэша. Проверь через db.serverStatus().wiredTiger.cache что ev…
- vadim_py69
- Сообщения: 4
- Зарегистрирован: Пт май 15, 2026 2:56 am
- lev_daemon
- Сообщения: 2
- Зарегистрирован: Пн май 11, 2026 3:40 am
- alex_root87
- Сообщения: 2
- Зарегистрирован: Сб май 16, 2026 12:04 pm
- ruslan_pro
- Сообщения: 24
- Зарегистрирован: Чт май 14, 2026 3:04 am
- omegadata6306
- Сообщения: 4
- Зарегистрирован: Чт май 14, 2026 11:52 am
- igor_pixel18
- Сообщения: 8
- Зарегистрирован: Ср май 13, 2026 1:59 pm
- valera_vector
- Сообщения: 32
- Зарегистрирован: Пн май 11, 2026 8:23 am
Re: Накопилось 800GB в MongoDB, индексы не лезут в RAM — что делать?
800 ГБ с индексами которые не влезают в 64 ГБ — это сигнал что пора смотреть на архивирование холодных данных ещё до шардинга. Сначала сделай db.collection.stats() и смотри на totalIndexSize. Скорее всего там несколько compound-индексов которые дублируют друг друга или покрывают запросы которые давно не используются. Через explain("executionStats") прогони топ медленных запросов и выброси индексы которые не попадают ни в один IXSCAN. У нас на аналогичном объёме это дало минус 30% от размера индексов.
- nethex8167
- Сообщения: 12
- Зарегистрирован: Ср май 13, 2026 10:06 am
Re: Накопилось 800GB в MongoDB, индексы не лезут в RAM — что делать?
Если чистка индексов не помогает — Time-Series collections в MongoDB 7 дают встроенное compressed-хранение для временных данных с гораздо меньшим footprint индексов. Если у тебя есть timestamp-поле и данные старше 6-12 месяцев нужны редко — мигрируй исторические данные в отдельную TS-коллекцию с TTL или просто в архивную без индексов. Горячая коллекция с 90 днями данных влезет в RAM гораздо лучше.
- kirill_net
- Сообщения: 10
- Зарегистрирован: Вт май 12, 2026 1:04 pm
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
- Похожие темы
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость