【问题标题】:Is it ok to have a lot of jobs queries in Laravel query log?Laravel 查询日志中有很多作业查询可以吗?
【发布时间】:2020-11-25 10:34:40
【问题描述】:

最近我们的 Laravel 查询日志明显变大了。每天大约 50-100mb,一天后增加到 1-1.5gb。

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 查询可以吗?

【问题讨论】:

    标签: php mysql sql-server laravel logging


    【解决方案1】:

    是的,如果您有积压的工作需要几秒钟才能完成,这似乎很正常。

    来自文档:

    当队列中有作业可用时,worker 将继续处理作业,而不会在它们之间产生延迟。但是,sleep 选项决定了如果没有可用的新作业,工作人员将“休眠”多长时间(以秒为单位)。睡眠时,worker 不会处理任何新作业 - 作业将在 worker 再次唤醒后处理。

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

    因此,在您的示例中,队列工作人员有待处理的作业积压,并且在每个完成的作业后立即获取下一个作业。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-02
      • 2018-07-24
      • 1970-01-01
      • 2020-10-30
      • 2015-10-20
      • 2012-05-01
      • 1970-01-01
      • 2023-02-13
      相关资源
      最近更新 更多