首页 > 解决方案 > Laravel 作业队列,某些东西触发了两个 1615 错误

问题描述

我很难看出是什么导致了这个错误,所以我会试着解释到底发生了什么以及我在这里有什么。

Laravel 7 共享主机项目,有一个 cron 任务:

* * * * * artisan schedule:run >> /dev/null 2>&1

没有主管等,所以现在我../Console/Kernel.phpschedule功能是:

    $schedule->command('queue:restart')
        ->everyFiveMinutes();

    $schedule->command('queue:work --daemon')
        ->everyMinute()
        ->withoutOverlapping();

    $schedule->command('myapp:mycommand')->daily();

发生的事情是,每个午夜都mycommand运行得非常好,并且它完成了它的工作。但是,每天晚上大约一小时后,会触发两次 1615 错误:

SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared 
(SQL: select * from `jobs` where `queue` = default and ((`reserved_at` is null and 
`available_at` <= 1604019606) or (`reserved_at` <= 1604019516)) order by `id` asc 
limit 1 for update)

错误堆栈很长,从artisan(37)../Illuminate/Database/Connection.php(631),我对如何追踪这个问题有点困惑。在那个工匠参考之后,这个堆栈的所有文件都来自 laravel 供应商。

我似乎不明白在我预定的命令后一个小时发生了什么或为什么发生,或者它是否与它有任何关系。

任何想法如何更好地调试这个?它似乎不会破坏任何东西或影响任何东西,但它确实很烦人。

编辑:

正如所建议的,有几个可能的“修复”:

  1. ATTR_EMULATE_PREPARES在 Laravel 数据库配置中,以及
  2. 提高table_definition_cache数据库本身。

第一个会导致其他问题,而后者在共享主机中实际上并不适用,因为您必须要求服务提供商一直越来越多地提出它。

我的 TDC 增加到 1024 并且我的应用程序的前 24 小时没有错误。但是,现在我再次遇到同样的错误,甚至每 24 小时超过 20 件。它们仍然来自作业队列,但到目前为止我所有的作业都已成功执行。但我真的很担心这一点,因为其他人也遇到了由他们自己的代码触发的类似错误,如果某些电子邮件因此而无法离开应用程序,那就太糟糕了。

标签: phplaravellaravel-7

解决方案


推荐阅读