cron_schedule累积数百万行后,Cron扫描和后台页面变慢。删除整张表会丢失正在执行与待执行任务,应先找出增长原因。
解决记录
步骤1:按job_code和status统计数量、最老时间与执行耗时,识别重复调度、长期error或never finished任务。
步骤2:确认cron:run没有被多个系统Cron以过高频率重复启动,并检查同一组锁是否正常。
步骤3:修复异常Job后配置合理的history_success_lifetime、history_failure_lifetime与cleanup_every。
步骤4:分批删除超过保留期的success/error/missed历史记录,控制事务大小并保留pending/running。
命令与数据检查
SELECT job_code,status,COUNT(*) c,MIN(created_at),MAX(created_at) FROM cron_schedule GROUP BY job_code,status ORDER BY c DESC LIMIT 30;DELETE FROM cron_schedule WHERE status IN ('success','error','missed') AND finished_at < UTC_TIMESTAMP()-INTERVAL 30 DAY LIMIT 5000;bin/magento config:show system/cron/default/history_success_lifetime
上线前验收
表行数稳定,Cron查询恢复使用索引,新任务按时运行且清理任务不会阻塞业务写入。

