Vasiliy
аа
AstraSerg
стейджи?
ну $match, $group и т.п.
Vasiliy
понял, сейчас
Andrew
Чутка вклинюсь, а коллекция большая вообще?
AstraSerg
Vasiliy
Andrew
Т.е. это все лежит так и так в оперативке
Andrew
и индекс делу не должен помочь
Andrew
но вот чтобы ухудшило...
Vasiliy
рубишный код
[
{ '$match': { key: { '$in': [2234, 2255] } } },
{ '$sort': { created_at: 1 } },
{ '$group': { _id: '$key', last: { '$last': '$value' } } }
]
на key индекс есть
Andrew
Монга для 200тыс записей оперативку всегда сожрет :))) Ну не факт конечно
AstraSerg
Vasiliy
Vasiliy
Vasiliy
ну я так и подумал
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
а чего оно тогда в агрегации работает)
Vasiliy
чото я походу понял, в агрегации норм работает потому что матч режет много записей, остаток помещается в памяти и быстро сортируется, а с индексом сортировка лезет в индекс
AstraSerg
Vasiliy
в експлейне, если без индекса смотреть, обращение к created_at только в fields, если индекс присутствует то появляется sort и там так же есть created_at
AstraSerg
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"=>[]}}}
AstraSerg
{"$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"=>[]}}}
Хм... Индекс используется. А вот этот запрос что вернёт: db.coll_name.count({"key": {$in: [2234, 2255]}})
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"
}
]
AstraSerg
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"
}
]
тут размера нет. покажите
var r = db.coll_name.stats()
r["indexSizes"]
Vasiliy
db.collection.stats()["indexSizes"]
{ "_id_" : 4698112, "key_1" : 970752, "created_at_1" : 5419008 }
AstraSerg
Vasiliy
ну да) дата создания же)
Vasiliy
ну не, мне с секунадми надо
Vasiliy
но в теории да
AstraSerg
ща ссыль найду...
Vasiliy
как то грустно это, хотелось отфильтровать последнюю запись по конкретной сущности, но чёт с сортом медленно
AstraSerg
Vasiliy
доли секунды без индекса
Vasiliy
я так понимаю без него в какой-то момент данные смогут не влезть в память и запрос упадёт с ошибкой
Vasiliy
о чё помогло
Vasiliy
добавил стейдж с проджектионом в начало пайплайна
Vasiliy
чтобы лишние поля убрать(там логи с консоли в base64 сохраняются)
Vasiliy
и доли секунды вместе с сортом
AstraSerg
Vasiliy
А то я уж было подумал что стату пользователь по полминуты ждать будет
AstraSerg
> (там логи с консоли в base64 сохраняются)
наверно размер большой?
AstraSerg
Vasiliy
Vasiliy
Там строки 24 с терминала в base64
Vasiliy
а проекции памяти не жрут? на что вообще с монгой обращать внимания чтобы ВНЕЗАПНО не обнаружить что памяти пизда?
AstraSerg
вот вроде не плохая статья, почитайте: https://mixmax.com/blog/improving-mongo-performance-by-managing-indexes
AstraSerg
Vasiliy
спасибо за помощь
AstraSerg
Да не за что :)
AstraSerg
Всё ни как не найду подходящего описания индексирования
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.
AstraSerg
Artem
Всем привет! Хочу сделать автобекапы с помощью крона на дебиан, но крон не запускает команды, кто знает почему может быть такое?
* * * * * mongodump --out /data/mongobackups/`date +"%m-%d-%y"`
3 1 * * * find /data/mongobackups/ -mtime +7 -exec rm -rf {} \;
Artem
полный путь к монгодамп укажи
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 +")