ScrapydWeb 定时任务栏目卡顿问题分析与解决

76 阅读1分钟

问题:
在使用 scrapydweb 调度长期任务时,由于任务记录数量庞大,访问定时任务列表时可能会出现明显的卡顿现象。

image.png

解决方案:
短期缓解措施: image.png

一. 定期执行 TRUNCATE 操作清空 task_resulttask_job_result 表,以减小记录数量。

在删除表中数据时,由于外键约束,必须按顺序删除数据,确保依赖关系不被破坏。以下是清空 task_resulttask_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;

注意事项:

  1. TRUNCATE TABLE 的性能优于 DELETE,但会重置表的自增主键计数器。
  2. 禁用外键约束是为了防止因外键引用问题导致的操作失败,清空数据后需恢复外键约束。
  3. 执行前请确保没有正在使用这些表的数据,或者已备份相关数据。

此脚本可以高效、安全地清空这两个表。

二. 或者,定期将任务记录归档至其他存储介质(如新表或文件)以腾出空间。

当前方案的局限性:
上述措施仅能缓解当前的性能问题,但未能从根本上解决任务记录堆积导致的性能瓶颈。

参考文档:
ScrapydWeb Issue #126