Anonymous
Anonymous
Denis
Всем привет! Подскажите как монга работает с памятью? При вставке большого кол-во данных, монга начинает потреблять большое кол-во памяти. Что она хранит в этой памяти? И что будет если ограничить лимиты монги по памяти в этом случае? Она будет падать?
Denis
Какую память
Я как понимаю за это отвечает механизм WiredTiger. Память оперативная (ОЗУ)
Denis
Если ограничить, то она начнет записывать на диск
Я буду выражатся максимально просто. Получается данные которые попадают в монгу, сначала аллоцируются в ОЗУ, до того времени пока не упрется в потолок. После этого монга будет писать данные напрямую в дисковую систему
Nick
нет
Nick
зависит от кучи факторов, основные из которых оператива, кеш WT и горячий сет данных
Nick
по механике, данные всегда пишутся на диск, но при этом остаются в кеше.
Nick
во время запрсоа если данных нет в кеше WT, првоеряется кеш операционки механизмами ОС, если в нем нет. то лезем за ними на диск
Constantin
Ну гипотетически может, а что у вас генерирует такое большое их количество?
Denis
во время запрсоа если данных нет в кеше WT, првоеряется кеш операционки механизмами ОС, если в нем нет. то лезем за ними на диск
Спасибо! Вот тут чекнул доку: https://docs.mongodb.com/manual/faq/diagnostics/#id2 У меня монга образно говоря в докер контейнере. Я могу просто установить лимиты на контейнер по памяти? При наличи что данные лежат на быстрых SSD
Constantin
7 ботов, а приложений?
Constantin
Как я понял у вас на питоне написано приложение. Один бот — одно приложение?
Constantin
Скорее всего у вас также connection pool примерно 5-10 коннектов. Но дальше я вам, наверно уже не подскажу куда копать
Anonymous
как я понял slice первым параметром принимает offset, а вторым количество елементов, которое нужно выдать?
Constantin
как я понял slice первым параметром принимает offset, а вторым количество елементов, которое нужно выдать?
Выше ссылку вам давал The following examples specify an array as an argument to $slice. Arrays take the form of [ skip , limit ], where the first value indicates the number of items in the array to skip and the second value indicates the number of items to return.
Anonymous
Я читал
Anonymous
Не внимательно читал
Anonymous
Там нужно - перед первым аргументом использовать
yopp
надо давать половину от памяти выделенной контейнеру
yopp
вторую половину пусть занимает дисковый кеш. WT хранит несжатые страницы в памяти и сжимает только при записи на диск. А значит что в дисковом кеше будут храниться сжатые страницы
Denis
надо давать половину от памяти выделенной контейнеру
Правильно понимаю что вот так можно это задать через конфиг?: wiredTiger: engineConfig: cacheSizeGB: xx
yopp
да
AstraSerg
Да тут получается, что не кластер проблема, а вы уперлись в лимит по выделенным вашему аккаунут соединениям. Есть возможность увеличить до 150 скажем?
AstraSerg
может кроме ботов там ещё кто-то присоединился?
AstraSerg
логи можете через этот web-интерфейс посмотреть?
AstraSerg
ага, и хакеры - это миф :))
AstraSerg
никому такая не нужна, но есть сканеры открытых портов и боты, им всё равно что брутфорсить
ᅠ ᅠ ᅠ ᅠ
Рекомендую описать еще проблему тех поддержке кластеров. Чем подробнее опишете, тем адекватнее будет ответ)
AstraSerg
на сколько я помню в компасе есть встроенный фаервол. Если IP ваших ботов статические, можете закрыть доступ всем остальным
yopp
вероятнее всего они «текут»
yopp
вы где-то их открываете и не закрываете
yopp
ваш драйвер скорее всего поддерживает connection pool
yopp
если у вас каждый «бот» это отдельное приложение, проблема может быть и в случае с connection pool. например если ваш драйвер использует пул из 16 соединений, то на 7 приложений это уже 112 штук
Vova
Как задать лимит для внутреннего массива? Например есть у меня объект { "_id": "123", "field": "qwerty", "strings": [ "1", "2", // Тут ещё 100 строк ] } Как сделать в одном запросе чтобы вернуло вот так { "_id": "123", "field": "qwerty", "strings": [ "1", "2" ] } То есть обрезать массив, в данном примере до 2 вхождений
yopp
https://docs.mongodb.com/manual/reference/operator/projection/elemMatch/#elemmatch-projection
yopp
обратите внимание что это projection, а не query
Vova
elemMatch всегда только 1 возвращает
AstraSerg
yopp
elemMatch всегда только 1 возвращает
а, да, вам два надо. можно через $filter выражение aggregate([ { $addFields: { strings: { $filter: { input: "$strings", as: "item", cond: { $in: [ "$$item", ["1", "2"] ] } } } } } ])
yopp
Как в сбербанке: «Где открывали, там и закрывайте» ;) Изучите документацию к своему драйверу
yopp
ваши боты вероятно написаны на каком-то языке, этот язык используя какой-то драйвер ходит в монгу
Constantin
Выключите все ваши приложения, подключенные к базе и проверьте
Constantin
Уменьшилось число коннектов или нет
Constantin
Перед этим я еще советую проверить авторизацию, все ли с ней хорошо
Constantin
Какая вероятность того, что вас могли расковырять и прямо сейчас куча плохих ботов что-то делает с вашей базой?
yopp
в атласе и так авторизация по-умолчанию
yopp
не нужно сложных теорий строить, с вероятностью 90% это где-то в приложении проблема
yopp
либо в деплое
yopp
в зависимости что за тариф на хероку, там может так быть, что несколько контейнеров с приложениями запускаются
AstraSerg
не нужно сложных теорий строить, с вероятностью 90% это где-то в приложении проблема
В данном случае я бы всё таки предостерег нашего уважаемого Алиса, так как подход «Кому я нужен» чреват боком :)
Denis
да
Подскажите, а как можно посмотреть чему равно это значение в самой монге?
Denis
db.serverStatus().wiredTiger.cache["maximum bytes configured"]
его можно передать как аргумент при запуске? Где то видел инфу по этому поводу, но что то не могу найти
yopp
mongod --help
Denis
mongod --help
ок чекну
Nick
@dd_bb подскажи, есть шардирвоанный кластер, count() с условием выдает что на одном из шардов есть доки, на остальных нет. Но find их не видит, ни черег стандартный шел, ни через софтовый драйвер если цеплятсья через mongos. Если прицепитсяь напрямую к репликасету, то там find выдает данные
yopp
кто-то записал данные мимо mongos?
Nick
что за хрень может быть и как лечится. версия 3.4.14
Nick
нет, только через него
yopp
проверь что есть чанки которые покрывают такие документы
Nick
данные записаны на прошлой неделе, для заливки и обработки через стандартны жавадайвер
yopp
и что чанк указывает на тот шард, на котором на самом деле находятся документы
Nick
это в конфиг.chunks?
yopp
да, где-то там
yopp
потому что если видно в shard-local и не видно через mongos — значит проблема где-то на уровне карты шарда
yopp
проверь что монгосы видят все шарды ещё
Nick
спасибо за наводку, была первоначальная разбивка на чанки и их миграция скриптом, пока не было данных