问题:
在使用 scrapydweb 调度长期任务时,由于任务记录数量庞大,访问定时任务列表时可能会出现明显的卡顿现象。
解决方案:
短期缓解措施:
一. 定期执行 TRUNCATE
操作清空 task_result
和 task_job_result
表,以减小记录数量。
在删除表中数据时,由于外键约束,必须按顺序删除数据,确保依赖关系不被破坏。以下是清空 task_result
和 task_job_result
表的 SQL 脚本:
-- 暂时禁用外键约束
SET FOREIGN_KEY_CHECKS = 0;
-- 清空 task_job_result 表
TRUNCATE TABLE task_job_result;
-- 清空 task_result 表
TRUNCATE TABLE task_result;
-- 恢复外键约束
SET FOREIGN_KEY_CHECKS = 1;
注意事项:
TRUNCATE TABLE
的性能优于DELETE
,但会重置表的自增主键计数器。- 禁用外键约束是为了防止因外键引用问题导致的操作失败,清空数据后需恢复外键约束。
- 执行前请确保没有正在使用这些表的数据,或者已备份相关数据。
此脚本可以高效、安全地清空这两个表。
二. 或者,定期将任务记录归档至其他存储介质(如新表或文件)以腾出空间。
当前方案的局限性:
上述措施仅能缓解当前的性能问题,但未能从根本上解决任务记录堆积导致的性能瓶颈。
参考文档:
ScrapydWeb Issue #126