Можно ли иметь много запросов о вакансиях в журнале запросов Laravel? - PullRequest
0 голосов
/ 05 августа 2020

Недавно наш журнал запросов Laravel стал значительно больше. Это было около ~ 50-100 МБ в день, а через день увеличилось до ~ 1-1,5 ГБ.

Есть много запросов к таблице jobs, например,

[05.08.2020 00:00:02] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574802, 1596571202]
[05.08.2020 00:00:05] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574805, 1596571205]
[05.08.2020 00:00:09] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574809, 1596571209]
[05.08.2020 00:00:12] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574812, 1596571212]
[05.08.2020 00:00:15] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574815, 1596571215]
[05.08.2020 00:00:18] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574818, 1596571218]
[05.08.2020 00:00:21] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574821, 1596571221]
[05.08.2020 00:00:25] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574825, 1596571225]
[05.08.2020 00:00:28] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574828, 1596571228]
[05.08.2020 00:00:31] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574831, 1596571231]
[05.08.2020 00:00:34] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574834, 1596571234]
[05.08.2020 00:00:37] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574837, 1596571237]
[05.08.2020 00:00:41] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574841, 1596571241]
[05.08.2020 00:00:44] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574844, 1596571244]
[05.08.2020 00:00:47] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574847, 1596571247]
[05.08.2020 00:00:50] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574850, 1596571250]
[05.08.2020 00:00:53] select * from `jobs` where `queue` = ? and ((`reserved_at` is null and `available_at` <= ?) or (`reserved_at` <= ?)) order by `id` asc limit 1 for update [default, 1596574853, 1596571253]

И они все время так спрашивают

Как мне уменьшить эту сумму? Или нормально иметь столько jobs запросов?

1 Ответ

0 голосов
/ 05 августа 2020

Да, это кажется нормальным, если у вас есть невыполненные задания, выполнение которых занимает несколько секунд.

Из документации:

Когда задания доступны в очереди, рабочий будет продолжать обрабатывать задания без задержек между ними. Однако опция sleep определяет, как долго (в секундах) рабочий будет «спать», если новых доступных заданий нет. Во время сна рабочий не будет обрабатывать новые задания - задания будут обработаны после того, как рабочий снова проснется.

https://laravel.com/docs/7.x/queues#job -expirations-and-timeouts

Итак, в вашем примере у обработчика очереди есть невыполненные задания, которые нужно обработать, и он сразу же выбирает следующее задание после каждого завершенного задания.

...