Files
MES_Manage_View_V20/doc/装配任务查询性能优化_20260725.md

102 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 系统类与阀类装配任务查询性能优化
## 变更信息
- 变更日期2026-07-25
- 变更环境:正式环境 `YL_MESDB`
- 变更范围:系统类装配任务查询、阀类装配任务查询
- 业务数据变更:无
- 前端文件变更:系统类、阀类页面首屏分页和单元格按需编辑
- IIS 文件变更:正式前端尚未部署,已生成待发布静态包
## 问题定位
原查询的主要耗时来自以下部分:
1. `View_生产工时视图` 在同一次查询中被重复扫描和分组四次。
2. 流程告警、装配在岗人员、质检在岗人员使用逐行相关子查询,结果行数增加时重复访问基础表。
3. SAP 关联数据在筛选候选任务前进行聚合,扩大了查询工作量。
4. 多个高频连接字段缺少适合当前访问方式的非聚集索引。
正式环境优化前缓存统计:
| 查询 | 平均耗时 | 平均逻辑读 |
| --- | ---: | ---: |
| 系统类装配任务 | 约 4.16 秒 | 约 142.7 万页 |
| 阀类装配任务 | 约 4.47 秒 | 约 154.7 万页 |
## 优化内容
1. 新增共享核心过程 `dbo.计划排产_装配任务查询_核心`,两个原过程保留原名称和参数,仅作为分类入口。
2. 先将符合条件的任务写入临时表,再对工时、流程、在岗人员、质检和 SAP 数据进行候选集范围内的汇总。
3.`View_生产工时视图` 的四次扫描合并为一次,任务工时和合同工时在一次聚合中计算。
4. 保留合同工时修复,合同维度继续使用 `订单合同号`
5. 将动态拼接条件改为参数化筛选,降低重复编译和字符串条件风险。
6. 新增 5 个辅助索引:
- `物料基础数据_零件图纸.IX_零件图纸_num`
- `车间生产管理工艺_零件生产工艺_工艺库.IX_工艺库_订单_顺序`
- `YL_质量检验_质检记录.IX_质检记录_质检类型_计划号`
- `登录基础数据_人员信息.IX_人员信息_姓名_班组`
- `流程表.IX_流程表_关联计划_流程`
## 验证结果
完整结果集逐列哈希比对结果一致:
| 查询 | 优化前 | 优化后 | 结果行数 | 数据一致性 |
| --- | ---: | ---: | ---: | --- |
| 系统类默认查询 | 3500 ms | 681 ms | 55 | 一致 |
| 阀类默认查询 | 6415 ms | 1316 ms | 283 | 一致 |
筛选条件回归均通过,包括指定订单、指定合同和未完成状态;其中阀类未完成查询由 `23431 ms` 降至 `623 ms`
正式接口按前端实际分页参数回归:
| 接口查询 | HTTP 状态 | 返回数据 | 接口耗时 |
| --- | ---: | ---: | ---: |
| 系统类 | 200 | 20/55 行 | 1201 ms |
| 阀类 | 200 | 20/283 行 | 940 ms |
部署后累计调用统计在 2026-07-25 最终核验时为:
| 查询 | 调用次数 | 平均耗时 | 平均逻辑读 |
| --- | ---: | ---: | ---: |
| 系统类装配任务 | 13 | 775.02 ms | 397782 页 |
| 阀类装配任务 | 13 | 1104.29 ms | 412203 页 |
合同工时非零数据复核:系统类合同装配工时 34 行、合同质检工时 20 行;阀类合同装配工时 97 行、合同质检工时 34 行。
## 部署与回滚
- 过程部署脚本:`db_backups/optimize_install_task_queries_20260725.sql`
- 过程回滚脚本:`db_backups/rollback_install_task_queries_20260725.sql`
- 索引部署脚本:`db_backups/optimize_install_task_query_indexes_20260725.sql`
- 索引回滚脚本:`db_backups/rollback_install_task_query_indexes_20260725.sql`
- 线上精确备份过程:
- `dbo.计划排产_系统类任务查询_优化前_20260725`
- `dbo.计划排产_阀类任务查询_优化前_20260725`
建议观察一个业务周期后再决定是否删除两个优化前备份过程。导出过程不在本次变更范围内。
## 首屏渲染二次优化
用户反馈数据库优化后页面体感仍需数秒。按正式接口连续测量,系统类通常为 `0.70-0.99` 秒,阀类通常为 `0.88-1.14` 秒;剩余等待主要发生在浏览器渲染阶段。原页面默认请求 100 行,并为每一行同时创建日期选择器、多选下拉框和预算数字输入框。
本次前端调整如下:
1. 默认分页由 100 行改为 20 行,可选 20、50、100 行。
2. 修复分页控件使用 `donepageSize/donepageCurrent`、请求却使用 `pageSize/pageCurrent` 的状态错配。
3. 日期、二次派工和预算字段默认使用文本显示,点击对应单元格后才创建编辑控件。
4. 保留原保存过程、日期修改过程、二次派工过程和预算计算公式,不改变业务数据口径。
正式接口 20 行回归结果:
| 查询 | 接口耗时范围 | 返回行数 | 响应字符数 |
| --- | ---: | ---: | ---: |
| 系统类 | 696-987 ms | 20/55 | 19670 |
| 阀类 | 876-1143 ms | 20/260 | 18672 |
相较原 100 行响应,系统类响应体由约 52825 字符降至 19670 字符,阀类由约 93429 字符降至 18672 字符;同时首屏不再批量创建各行编辑控件。
曾在正式库事务内验证“预展开合同订单后连接工时视图”和 3 个筛选索引。完整结果哈希一致,但系统类接口由约 0.82 秒增加到约 1.09 秒,阀类约 1.04 秒无明显收益,因此已完整回滚并清理临时过程和索引,未纳入正式方案。