Skip to content

perf: 任务历史模糊查询增加范围限制 #3856

@jsonwan

Description

@jsonwan

大业务下(单日任务量>=1000w)的大时间范围(例如最近1周)内的模糊查询会导致扫描大量数据(1亿+),引发慢查询,导致MySQL IO拉满整个实例高负载,影响到其他业务的正常查询(所有查询普遍变慢),存在较大风险,需要先通过参数分析限制此类大范围查询的产生,后续再结合其他技术手段支持这类大范围查询。

典型的慢查询SQL模式:
selectjob_execute.task_instance.idfromjob_execute.task_instance where (job_execute.task_instance.app_id= 1000001 andjob_execute.task_instance.namelike '%快速分发文件_20250928175616334%' andjob_execute.task_instance.create_time>= 1759808672000 andjob_execute.task_instance.create_time<= 1760413472000) order byjob_execute.task_instance.create_timedesc limit 22 offset 0;
对应的SQL执行计划:
Image

实现思路:对WebTaskExecutionResultResourceImpl类中的validateAndSetQueryTimeRange方法中增加校验逻辑,确保startTime、endTime参数所确定的搜索时间范围不超过最大时间范围。
最大时间范围(天)计算方法:允许搜索的最大数据量2000万(可配置)/过去7天内当前业务下平均每天的任务执行量,对小数采用进一法。
计算过去7天内当前业务下平均每天的任务执行量可以通过StatisticsService查询数据(resource = "executedTask" AND dimension = "timeUnit" AND dimension_value= "DAY")并计算,增加一个方法用于查询目标数据。

Metadata

Metadata

Assignees

Labels

backlog需求初始状态,等待产品进行评估kind/enhancement功能改进特性

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions