yopp
Ilya
мне помогла установка connectTimeoutMS
yopp
Это неверный метод оценки. Смотреть необходимо на collStats, на сумму size и indexSizes. https://docs.mongodb.com/manual/reference/command/collStats/#collStats.size
yopp
WT в кэше хранит некомпенсированные страницы
yopp
Если у вас хорошо сжимающиеся данные, на working set может потребоваться существенно больше памяти.
По поводу «висящих» соединений. Используйте возможности маркировки курсоров https://docs.mongodb.com/manual/reference/method/cursor.comment/
Например, добавляйте туда точку вызова.
Дальше через currentOp у вас будет возможность идентифицировать где в вашем приложении «текут» курсоры.
yopp
В остальном, если вы уже сталкивайтесь с нехваткой памяти, вам необходимо масштабироваться.
yopp
Даже если вы устраните текущие курсоры, это практически не повлияет на объём используемой памяти.
yopp
Если вас беспокоят цифры, то это повод перестать беспокоиться. Современные базы данных стараются максимально использовать оперативную память под свои нужды.
yopp
Внедрите средства контроля и следите за latency и количеством запросов по типу операций . Все остальные метрики имеют смысл только когда вы ищите проблемы, которые будут видны по росту latency.
Игорь
я просто к тому, что при удельном весе всей базы в 9, оперативы в итоге уходит 29. Я правильно понимаю, что монго таким образом может кешировать запросы или какие-то еще операции?
yopp
yopp
Она ничего не значит
Gleb
Vasiliy
ребяты, подскажите пожалуйста как в group: ... sum: '$column_name' приводить $column_name к числу?
Nick
Приводить к числу? Вы строки суммируете?
Vasiliy
мне т конвертить в aggregation а не приводить к числу
Vasiliy
Vasiliy
но в строках числа
AstraSerg
Vasiliy
у меня в бд есть значение value, где может быть строка или число (-1, 0, "1235)
я сохраняю как есть
код на рубях, но понятно должно быть
.aggregate([{'$match': {id: 2234}}, {'$group': {_id: '$id', value: { '$sum': '$value'}}}])
(вообще надо последнюю запись выбрать, но пока хочу хотя бы со всеми сделать) хочу на выходе получить сумму всех value как число, не зависимо от типа value
Nick
Если монга 4 версии то можно использовать https://docs.mongodb.com/manual/reference/operator/aggregation/toInt/
AstraSerg
Vasiliy
а чего, как гуглил?
AstraSerg
а чего, как гуглил?
https://www.google.com/search?newwindow=1&client=ubuntu&hs=Frg&channel=fs&q=mongodb+string+to+int&spell=1&sa=X&ved=0ahUKEwjy6_2jrdjcAhUEQpoKHdQODKIQBQgmKAA&biw=1080&bih=1817
Vasiliy
хм, я думал в aggregation как-то по особенному
Vasiliy
тэкс, оказалось что то что мне нужно это $last
Vasiliy
слушайте, а какой порядок у полей по дефолту?
.aggregate([{ '$match': { key: 2234 } }, { '$sort': { _id: -1 } }, { '$group': { _id: '$key', value: { '$first': '$value' } } }])
делаю так, всё ок, но очень медленно возвращается результат
делаю так вот
.aggregate([{'$match': {key: 2234}}, {'$group': {_id: '$key', value: { '$last': '$value'}}}])
очень быстро, но чёт смущает что может быть порядок не верный
и как можно всю last строку вернуть, а не только одно поле?
Vasiliy
отсортировано - значит sort в aggregation применен?
AstraSerg
Vasiliy
а, вон как, а то у меня без сорта очень быстро проходит и результат даже одинаковый
Vasiliy
чем с сортом
Vasiliy
а как-нибудь sort можно ускорить? там sort по _id, я в монге новый человек, на _id по дефолту нет индекса?
AstraSerg
> и как можно всю last строку вернуть, а не только одно поле? Для этого нужно в $group добавить все нужные поля
Vasiliy
AstraSerg
грустно
Это ж логично. Чё грустить?
Vasiliy
ну у меня есть отчеты по сессиям в монге для пользователей
Vasiliy
мне бы хотелось взять для всех пользователей по последнему отчету
Vasiliy
в принципе такое { '$sort': { created_at: -1 } } быстрее чем по _id
AstraSerg
вот смотрите: у вас пользователь Вася, скажем. Записи о нём: Вася - 2018-06-06, Вася - 2018-06-07, 2018-06-08. Вы группируете по пользователю, значит первое поле будет Вася. А какую дату взять во второе поле? Максимальную? минимальную? Среднюю? Это за вас никто не решит
AstraSerg
Bro
для сорта нужен индекс на поле
Bro
если большая база
Bro
сорт кстати по _id можно делать насколько я помню
AstraSerg
для сорта нужен индекс на поле
Ага, можно конечно и без индекса, если ресурсов не жалко :) и порядок важен. Вот здесь можно почитать: https://docs.mongodb.com/manual/indexes/
Bro
монговский ид же тоже со временем
Bro
и можно его сортировать
Vasiliy
Vasiliy
10 сек против сотых
Vasiliy
на created_at индекса нет
AstraSerg
а сколько документов в коллекции?
Vasiliy
261244
Bro
фигня
Bro
у меня вот щаз на одной коллекции не влезает результат
AstraSerg
261244
не так что бы много, но имеет смысл сделать индекс. Только почитайте сначала про индексы, что бы сделать такой, который будет использоваться на максимальном количестве запросов
Vasiliy
мне больше интересно почему сорт по _id так медленно работает
Vasiliy
и не будет ли тормозов когда добавлю индекс на created_at
AstraSerg
Bro
а что реально сортировка по _id медленнее индекса по времени работает?
Vasiliy
на поле времени нет индекса
AstraSerg
Vasiliy
ну вот
c { '$sort': { created_at: -1 } } - SUCCEEDED | 0.02214646s
c { '$sort': { _id: -1 } } - SUCCEEDED | 10.304851694s
AstraSerg
Vasiliy
3 секунды
Vasiliy
в среднем
Vasiliy
но created_at даже без индекса быстрее _id
AstraSerg
может что-то проясниться...
Vasiliy
ну кстати
Vasiliy
добавил индекс на поле created_at и сорт начал тормозить
AstraSerg
Vasiliy
explain говорит что sort если на нем нет индекса вообще не участвует
Vasiliy
ну я его делаю
db.collection_name.createIndex({'created_at': 1})
добавляю потом в агрегацию
{ '$sort': { created_at: 1 } }
и работает дольше на 3 сек чем без индекса
AstraSerg
Vasiliy
стейджи?