定时调度性能修复交接(截至 2026-07-24)
定时调度性能修复交接(截至 2026-07-24)
历史说明:本文记录的是 2026-07-24 的运行状态。2026-08-04 起仓库已移除 Flyway,V7/V10/V11 的结构与稳定种子数据收敛到
backend/src/main/resources/db/migration/V1__initial_schema_and_seed.sql;文中的 schema version 7、V7 和旧回滚步骤仅供追溯,当前新空库只允许手工执行 V1,已有业务库不得重复执行。
1. 当前结论
- 原规则任务实例 60 处理 470,269 条评估耗时约 43 分钟,根因是全量历史写入、旧/新结果两次翻状态和单个长事务,不是死锁或机器不足。
- 第一阶段 SQL 与事务优化未达到 5 分钟目标,已按门槛实施第二阶段:新增当前评估窄指针,并将评估暂存改为按 CGI 最多四路并行。
- Flyway V7 已成功应用;
tb_metric_evaluation_current与迁移前当前评估数量均为 470,269,schema version 为 7。 - 二阶段完整压测已通过:实例 63 处理 470,269 条,端到端约 3 分 58 秒,最终原子发布约 1 秒,满足 5 分钟/60 秒验收门槛。
- 功能回归与目标测试通过,当前可以进入部署前复核和受控灰度;本地 8082 后端已停止,避免测试调度继续运行。
2. 已完成事项
数据与功能
- CGI 已从
TEST2-460-00-*规范为460-00-*,性能与底噪共同 CGI 为 20 个。 - 已发布动态基线配置
CFG-20260722120000-CGI-FIX,覆盖 7 个指标。 - 共现率为 0 时返回可用的 0;特征异常率为 0 时 Lift 返回无定义原因,不再统一报“无配对样本”。
- 前端 Lift 空态优先展示后端逐特征原因;平均底噪读取规范 CGI 的已发布源值。
调度性能
baselineSourceRows已改为一次聚合最新范围,基线实例 57 从约一小时无结果降到约 2 分钟完成。- 下游基线、预测、回测、规则实例会继承上游
tb_schedule_run_scope。 - 规则计数与评估写入使用相同的发布运行、CGI 和业务时间范围。
- 规则任务已拆为输入固化、评估暂存、告警证据暂存、原子发布四个事务阶段。
- 运行中会更新
heartbeat_at/result_count,阶段日志包含traceId、运行 ID、数量和耗时。 - 失败或停止会保留旧当前指针,并将本次评估快照标记失败。
- V7 新增
tb_metric_evaluation_current;页面和基线经指针读取当前评估,不再批量更新历史评估为SUPERSEDED。 - 评估暂存按 CGI 最多四路并行,最终事务只切换窄指针、发布告警和发布运行。
3. 数据库与运行状态
- 本地后端地址:
http://localhost:8082 - 当前状态:已停止,无 8082 监听;需要继续验证时再启动
- 日志:
backend/app-8082-performance.stdout.log、backend/app-8082-performance.stderr.log - schema version:
7 - 当前指针数:470,269
- 迁移前当前评估数:470,269
uk_metric_eval_current已删除,当前唯一性由tb_metric_evaluation_current.metric_result_id保证。
压测实例:
| 实例 | 状态 | 说明 |
|---|---|---|
| 60 | SUCCEEDED | 旧实现基准,470,269 条,约 43 分钟 |
| 61 | FAILED | 第一轮压测,发现 scope 连接执行计划错误后主动终止 |
| 62 | FAILED | 第二轮压测,确认单线程暂存约 400~500 条/秒后主动终止 |
| 63 | SUCCEEDED | 二阶段完整验收,470,269 条,约 3 分 58 秒,发布约 1 秒 |
实例 61、62 的失败为受控压测终止,不是业务数据故障;当前发布结果未受影响。
4. 主要修改文件
backend/src/main/java/com/chinamobile/g5b2/service/scheduling/PipelineTaskService.javabackend/src/main/java/com/chinamobile/g5b2/mapper/scheduling/PipelineTaskMapper.javabackend/src/main/java/com/chinamobile/g5b2/mapper/scheduling/SchedulingMapper.javabackend/src/main/resources/mapper/scheduling/PipelineTaskMapper.xmlbackend/src/main/resources/mapper/scheduling/SchedulingMapper.xmlbackend/src/main/resources/mapper/published/PublishedDataMapper.xml- 已并入
backend/src/main/resources/db/migration/V1__initial_schema_and_seed.sql;历史迁移文件不再保留。 backend/src/test/java/com/chinamobile/g5b2/service/scheduling/PipelineTaskServiceTest.javabackend/src/test/java/com/chinamobile/g5b2/mapper/MapperXmlConfigurationTest.javadocs/数据库表结构与指标口径设计.md
前序功能修改还包括 PublishedDataService.java、PerformancePage.tsx 和 PublishedDataServicePerformanceTest.java。
5. 已完成验证
- 第一阶段目标测试:24/24 通过。
- 第二阶段目标测试:16/16 通过,包括 Mapper XML、规则事务、指针 SQL 和共现率/Lift 回归。
- 注解 SQL 扫描:无匹配。
- 前序前端
npm run build:通过,仅有既有 chunk size warning。 - 全量 Maven 测试存在 5 个既有
NoClassDefFoundError,涉及 Audit/Baseline/Model Controller/Service,与本次修改无关;本次目标测试均通过。
6. 接手后的执行顺序
- 空库部署前手工执行评审后的
V1__initial_schema_and_seed.sql;已有业务库不重复执行,应用启动不执行迁移。 - 在预发布环境执行目标 Maven 测试、Mapper XML 装配测试和注解 SQL 扫描,并确认
tb_metric_evaluation_current指针逐键一致。 - 首次灰度仅启用一个规则实例,使用独立
X-Trace-Id,监控四阶段耗时、连接池等待、数据库 CPU/IO 和最终发布事务时长。 - 发布后核对指针数、每指标评估状态、20 个共同 CGI 同小时配对、共现率/Lift、平均底噪和告警证据。
- 保持验收门槛:50 万补数/重放不超过 5 分钟,常规小时增量不超过 30 秒,最终发布事务不超过 60 秒。
- 若暂存阶段失败,确认旧指针不变;若最终发布异常,先停规则调度并按第 7 节整体回滚协议处理,不直接启动 V6 应用。
7. 风险与回滚
- V7 已删除旧评估当前唯一索引。二阶段成功发布后,旧应用会错误地直接按
publish_status/current_marker读取多个历史快照,因此不能只回滚应用包。 - 如需回滚,必须先停止规则任务,并同步恢复旧读路径、旧发布切换协议和唯一约束;不能直接启动 V6 代码。
- 四路并行会占用最多 4 个数据库连接;本地完整压测未出现连接或事务残留,预发布和生产灰度仍需观察连接等待及数据库 CPU/IO。
- 当前仓库根目录没有
.git,无法用git diff/status生成变更清单;交接以以上文件和测试结果为准。
8. TraceId
- CGI 维护:
maintenance-cgi-normalize-20260722 - 配置发布:
maintenance-analysis-config-20260722 - 原基线/规则链:
maintenance-baseline-optimize-20260722 - 第一轮压测:
benchmark-rule-hotfix-20260722 - 第二轮压测:
benchmark-rule-hotfix2-20260722 - 二阶段完整验收:
benchmark-rule-hotfix3-20260723
9. 第三次压测与复核结果(2026-07-23)
- 使用独立 trace
benchmark-rule-hotfix3-20260723,复制失败实例 62 的 4 条已发布输入血缘创建受控测试实例 63;未修改导入事实、指标发布结果、配置或历史实例。 - 实例 63(发布运行 24)于 09:04:54 开始、09:08:52 完成,端到端耗时约 3 分 58 秒,
result_count=470269,实例和发布运行均为SUCCEEDED/PUBLISHED。 - 阶段耗时:输入固化 2.4 秒;按 CGI 并行暂存指标评估 121.1 秒;告警和证据暂存 30.9 秒;原子切换发布约 1 秒。满足端到端不超过 5 分钟、发布事务不超过 60 秒的验收门槛。
- 数据验收:
tb_metric_evaluation_current为 470,269 行且全部指向发布运行 24;发布运行 24 评估为 470,269 行、覆盖 21 个 CGI;无活动 InnoDB 事务;失败实例 61、62 未改变当前指针。 - 复核结论:
ruleScopeCgis按(instance_id,cgi)唯一范围分片,insertMetricEvaluations使用m.cgi = #{cgi}且输入发布运行有唯一约束,四路并行不会重复计数;页面评估读取统一经 V7 当前指针,失败/停止路径保持旧指针不变。此前实现未发现需要回滚的偏移。 - 目标测试
PipelineTaskServiceTest、MapperXmlConfigurationTest通过,注解 SQL 扫描仍无匹配。第三次压测后已停止本地 8082 后端,避免测试调度继续运行。