php - Laravel 作业队列,某些东西触发了两个 1615 错误
问题描述
我很难看出是什么导致了这个错误,所以我会试着解释到底发生了什么以及我在这里有什么。
Laravel 7 共享主机项目,有一个 cron 任务:
* * * * * artisan schedule:run >> /dev/null 2>&1
没有主管等,所以现在我../Console/Kernel.php
的schedule
功能是:
$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 供应商。
我似乎不明白在我预定的命令后一个小时发生了什么或为什么发生,或者它是否与它有任何关系。
任何想法如何更好地调试这个?它似乎不会破坏任何东西或影响任何东西,但它确实很烦人。
编辑:
正如所建议的,有几个可能的“修复”:
ATTR_EMULATE_PREPARES
在 Laravel 数据库配置中,以及- 提高
table_definition_cache
数据库本身。
第一个会导致其他问题,而后者在共享主机中实际上并不适用,因为您必须要求服务提供商一直越来越多地提出它。
我的 TDC 增加到 1024 并且我的应用程序的前 24 小时没有错误。但是,现在我再次遇到同样的错误,甚至每 24 小时超过 20 件。它们仍然来自作业队列,但到目前为止我所有的作业都已成功执行。但我真的很担心这一点,因为其他人也遇到了由他们自己的代码触发的类似错误,如果某些电子邮件因此而无法离开应用程序,那就太糟糕了。
解决方案
推荐阅读
- javascript - SASS/SCSS @import 前面的 ~ 是什么意思/做什么?
- wordpress - 从插件的主 php 文件调用 wordpress 函数 get_stylesheet_directory
- javascript - 如何从 URL 获取目录?
- visual-studio-2015 - 为什么在 Visual Studio 中构建 vdproj 文件会尝试触发我的计算机的还原?
- python - tkinter 中的双重输入小部件
- mysql - MySQL为空别名赋值
- wordpress - 301状态重定向代码
- postgresql - 权限未更新
- drop-down-menu - Bootstrap4 下拉菜单仅在第二次单击时有效
- java - 在 Spring 环境中使用 bean-integration 时如何指定 Apache Camel 数据格式?