Vasiliy
аа
AstraSerg
стейджи?
ну $match, $group и т.п.
Vasiliy
понял, сейчас
Andrew
Чутка вклинюсь, а коллекция большая вообще?
Vasiliy
261244
уот
Andrew
Т.е. это все лежит так и так в оперативке
Andrew
и индекс делу не должен помочь
Andrew
но вот чтобы ухудшило...
Vasiliy
рубишный код [ { '$match': { key: { '$in': [2234, 2255] } } }, { '$sort': { created_at: 1 } }, { '$group': { _id: '$key', last: { '$last': '$value' } } } ] на key индекс есть
AstraSerg
Т.е. это все лежит так и так в оперативке
Не факт, мало ли что там на сервер за ситуация...
Andrew
Монга для 200тыс записей оперативку всегда сожрет :))) Ну не факт конечно
AstraSerg
AstraSerg
пробовал менять местами матч и сорт, но разницы не особо заметил
match должен быть на первом месте, он сокращает датасет для следующего стейджа
Vasiliy
ну я так и подумал
Vasiliy
а, ну вот
Vasiliy
без индекса "errmsg" : "Executor error during find command :: caused by :: errmsg: \"Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.\""
Vasiliy
а чего оно тогда в агрегации работает)
AstraSerg
а чего оно тогда в агрегации работает)
в агрегации до 100мегабайт лимит https://docs.mongodb.com/manual/core/aggregation-pipeline-limits/#memory-restrictions
Vasiliy
чото я походу понял, в агрегации норм работает потому что матч режет много записей, остаток помещается в памяти и быстро сортируется, а с индексом сортировка лезет в индекс
Vasiliy
в експлейне, если без индекса смотреть, обращение к created_at только в fields, если индекс присутствует то появляется sort и там так же есть created_at
Vasiliy
С индексом и без?
AstraSerg
без индекса не нужно, там нечего сомтреть
Vasiliy
Хорошо, скину
Vasiliy
{"$cursor"=> {"query"=>{"key"=>{"$in"=>[2234, 2255]}}, "sort"=>{"created_at"=>1}, "fields"=>{"value"=>1, "key"=>1, "_id"=>0}, "queryPlanner"=> {"plannerVersion"=>1, "namespace"=>"db.collection", "indexFilterSet"=>false, "parsedQuery"=>{"key"=>{"$in"=>[2234, 2255]}}, "winningPlan"=> {"stage"=>"FETCH", "filter"=>{"key"=>{"$in"=>[2234, 2255]}}, "inputStage"=> {"stage"=>"IXSCAN", "keyPattern"=>{"created_at"=>1.0}, "indexName"=>"created_at_1", "isMultiKey"=>false, "multiKeyPaths"=>{"created_at"=>[]}, "isUnique"=>false, "isSparse"=>false, "isPartial"=>false, "indexVersion"=>2, "direction"=>"forward", "indexBounds"=>{"created_at"=>["[MinKey, MaxKey]"]}}}, "rejectedPlans"=>[]}}}
Vasiliy
1767
AstraSerg
получается фуллскан по 1767 документам быстрее чем по индексу из 200тыс строк, что не исключено. А ещё покажите db.coll_name.getIndexes() Интересно какой размер индекса
Vasiliy
тут ещё интересно что по времени у меня гроуп по всей коллекции примерно одинаково что после матча
AstraSerg
если используется дефолтное время, то там точность до миллисекунд. Если не брать экстремальные условия (более 1000 инсертов в секунду) от такого индекса мало толку.
Vasiliy
db.collection.getIndexes() [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "db.collection" }, { "v" : 2, "key" : { "key" : 1 }, "name" : "key_1", "ns" : "db.collection" }, { "v" : 2, "key" : { "created_at" : 1 }, "name" : "created_at_1", "ns" : "db.collection" } ]
Vasiliy
db.collection.stats()["indexSizes"] { "_id_" : 4698112, "key_1" : 970752, "created_at_1" : 5419008 }
AstraSerg
db.collection.stats()["indexSizes"] { "_id_" : 4698112, "key_1" : 970752, "created_at_1" : 5419008 }
5,5 мегабайт, похоже, что количество записей в индексе столько же сколько документов. В этом случае лучше не использовать этот индекс
Vasiliy
ну да) дата создания же)
AstraSerg
ну да) дата создания же)
ну по большому счёту дата может быть гранулирована до дня, тогда смысл есть
Vasiliy
ну не, мне с секунадми надо
Vasiliy
но в теории да
AstraSerg
но в теории да
да, я как раз про это
AstraSerg
ща ссыль найду...
Vasiliy
как то грустно это, хотелось отфильтровать последнюю запись по конкретной сущности, но чёт с сортом медленно
AstraSerg
как то грустно это, хотелось отфильтровать последнюю запись по конкретной сущности, но чёт с сортом медленно
Без сорта нет гарантии правильности результата. И вы же кговорили, что доли секунды занимает
Vasiliy
доли секунды без индекса
Vasiliy
я так понимаю без него в какой-то момент данные смогут не влезть в память и запрос упадёт с ошибкой
Vasiliy
о чё помогло
Vasiliy
добавил стейдж с проджектионом в начало пайплайна
Vasiliy
чтобы лишние поля убрать(там логи с консоли в base64 сохраняются)
Vasiliy
и доли секунды вместе с сортом
Vasiliy
А то я уж было подумал что стату пользователь по полминуты ждать будет
AstraSerg
> (там логи с консоли в base64 сохраняются) наверно размер большой?
Vasiliy
> (там логи с консоли в base64 сохраняются) наверно размер большой?
Если в отдельной записи то не очень, но походу в сумме набегает
Vasiliy
Там строки 24 с терминала в base64
AstraSerg
Там строки 24 с терминала в base64
а, ну это много. Конечно такое лучше сразу обрезать
Vasiliy
а проекции памяти не жрут? на что вообще с монгой обращать внимания чтобы ВНЕЗАПНО не обнаружить что памяти пизда?
AstraSerg
вот вроде не плохая статья, почитайте: https://mixmax.com/blog/improving-mongo-performance-by-managing-indexes
Vasiliy
спасибо за помощь
AstraSerg
Да не за что :)
AstraSerg
Всё ни как не найду подходящего описания индексирования
Vasiliy
добавил стейдж с проджектионом в начало пайплайна
гавно вариант, индексы после прожекта не юзаются
AstraSerg
гавно вариант, индексы после прожекта не юзаются
Это вы в доках нашли? Ссылку можете дать?
Vasiliy
https://docs.mongodb.com/manual/reference/operator/aggregation/sort/#sort-operator-and-performance
Vasiliy
> If $project, $unwind, or $group occur prior to the $sort operation, $sort cannot use any indexes.
Artem
Всем привет! Хочу сделать автобекапы с помощью крона на дебиан, но крон не запускает команды, кто знает почему может быть такое? * * * * * mongodump --out /data/mongobackups/`date +"%m-%d-%y"` 3 1 * * * find /data/mongobackups/ -mtime +7 -exec rm -rf {} \;
Artem
полный путь к монгодамп укажи
Artem
полный путь к монгодамп укажи
так? /usr/bin/mongodump --out /data/mongobackups/`date +"%m-%d-%y"`
Artem
результата нет
Artem
which mongodump
Artem
/usr/bin/mongodump
Artem
что в логах ?
Artem
/var/log/syslog
Artem
root@dedicated:~# service cron status ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled) Active: active (running) since Mon 2018-08-06 01:04:55 EEST; 22h ago Docs: man:cron(8) Main PID: 488 (cron) CGroup: /system.slice/cron.service └─488 /usr/sbin/cron -f Aug 06 23:49:01 dedicated CRON[2911]: pam_unix(cron:session): session opened for user root by (uid=0) Aug 06 23:49:01 dedicated CRON[2912]: (root) CMD (/usr/bin/mongodump --out /data/mongobackups/`date +")