PHP7.4接口报错:Uncaught PDOException: SQLSTATE[HY000]: General error: 3024 Query execution was interrupted, maximum statement execution time exceeded
后台自动定时接口,使用宝塔定时任务执行时报错:
<b>Fatal error</b>: Uncaught PDOException: SQLSTATE[HY000]: General error: 3024 Query execution was interrupted, maximum statement execution time exceeded in /data/www/wwwroot/xxx.xxx.xxx/public/api/Alltime-getActDevice.php:133

直接访问接口发现可以执行,但是执行时间较长,

检查源码发现源码逻辑没有问题,因为需求问题,当前不得不这样写:

查询相关文章发现需要调整 PHP相关参数设置,Limit of timeout,开始为50,修改为1200,保存后,点击执行发现已经能够执行了!

总结:
当前定时任务频繁出错原因为SQL语句逻辑超长,查询条件过多,导致执行查询时超时,
短期解决方法:
1.调大Limit of timeout参数设置,0为不限制(不建议),99999为超大(不建议),可打印执行文件的执行时间,略偏大即可,不至于影响系统内存占用;
长期解决方法:
1.因查询文件是查询十多个渠道的相关数据,且一次性查询30天,可以新增数据表,记录每日查询前一日的查询数据即可,减少频繁查询次数,只需查询当日(保证实时)
和前一日(保证既往数据准确)即可降低查询压力。
2.优化查询逻辑,使用代码逻辑,而不是大量UNION、JOIN语句,尽量将计算任务通过代码执行而不是通过SQL计算!
参考文章:
https://blog.itpub.net/29773961/viewspace-2150443/
https://www.cnblogs.com/aeolian/p/18863826

浙公网安备 33010602011771号