5.1 KiB
5.1 KiB
系统类与阀类装配任务查询性能优化
变更信息
- 变更日期:2026-07-25
- 变更环境:正式环境
YL_MESDB - 变更范围:系统类装配任务查询、阀类装配任务查询
- 业务数据变更:无
- 前端文件变更:系统类、阀类页面首屏分页和单元格按需编辑
- IIS 文件变更:正式前端尚未部署,已生成待发布静态包
问题定位
原查询的主要耗时来自以下部分:
View_生产工时视图在同一次查询中被重复扫描和分组四次。- 流程告警、装配在岗人员、质检在岗人员使用逐行相关子查询,结果行数增加时重复访问基础表。
- SAP 关联数据在筛选候选任务前进行聚合,扩大了查询工作量。
- 多个高频连接字段缺少适合当前访问方式的非聚集索引。
正式环境优化前缓存统计:
| 查询 | 平均耗时 | 平均逻辑读 |
|---|---|---|
| 系统类装配任务 | 约 4.16 秒 | 约 142.7 万页 |
| 阀类装配任务 | 约 4.47 秒 | 约 154.7 万页 |
优化内容
- 新增共享核心过程
dbo.计划排产_装配任务查询_核心,两个原过程保留原名称和参数,仅作为分类入口。 - 先将符合条件的任务写入临时表,再对工时、流程、在岗人员、质检和 SAP 数据进行候选集范围内的汇总。
- 将
View_生产工时视图的四次扫描合并为一次,任务工时和合同工时在一次聚合中计算。 - 保留合同工时修复,合同维度继续使用
订单合同号。 - 将动态拼接条件改为参数化筛选,降低重复编译和字符串条件风险。
- 新增 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.计划排产_系统类任务查询_优化前_20260725dbo.计划排产_阀类任务查询_优化前_20260725
建议观察一个业务周期后再决定是否删除两个优化前备份过程。导出过程不在本次变更范围内。
首屏渲染二次优化
用户反馈数据库优化后页面体感仍需数秒。按正式接口连续测量,系统类通常为 0.70-0.99 秒,阀类通常为 0.88-1.14 秒;剩余等待主要发生在浏览器渲染阶段。原页面默认请求 100 行,并为每一行同时创建日期选择器、多选下拉框和预算数字输入框。
本次前端调整如下:
- 默认分页由 100 行改为 20 行,可选 20、50、100 行。
- 修复分页控件使用
donepageSize/donepageCurrent、请求却使用pageSize/pageCurrent的状态错配。 - 日期、二次派工和预算字段默认使用文本显示,点击对应单元格后才创建编辑控件。
- 保留原保存过程、日期修改过程、二次派工过程和预算计算公式,不改变业务数据口径。
正式接口 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 秒无明显收益,因此已完整回滚并清理临时过程和索引,未纳入正式方案。