系统环境:
ECC6 EHP7 IBM-P740 192G RAM IBM-P7+ 32CORE ORACLE 11.2.0.3
症状:
ZPPR0001_NEW生产订单批量报工程序 ,运行于每天凌晨2:30, 运行速度缓慢。
2015-09-14,程序在9:00才运行完毕。
2015-09-15,程序在6:00才运行完毕。
2015-09-16,程序在10:00才运行完毕。
在上班时间进行报工处理,会被其它业务锁定物料,无法处理物料投料,形成大量COGI信息,程序需要性能调优。
原因:
运行ZPPR0001_NEW程序,SE30统计 有一行对RESB表读取的代码,占用了大量的时间:
SELECT COUNT(*) FROM RESB WHERE AUFNR = GOODSMVT_ITEM-ORDERID "生产订单
AND MATNR = GOODSMVT_ITEM-MATERIAL "物料
AND RGEKZ = 'X' "反冲
AND XLOEK = '' "删除
该SQL的作用是在RESB中确认生产订单组件的物料是否允许投料和是否是删除的。
如果满足,该物料会被用于生产订单。后续会把寄售类型转为自有类型投料。
解决办法:
减少该SQL语句的查询时间。
一开始,我只关注该SQL本身是否有优化的可能,进展不大。
后来结合上下文程序,发现前段程序出现的查询条件中有关键字还没有利用起来。
在查询条件中加入关键字后的代码:
SELECT COUNT(*) FROM RESB UP TO 1 ROWS WHERE AUFNR = GOODSMVT_ITEM-ORDERID "生产订单 1100003114
AND MATNR = GOODSMVT_ITEM-MATERIAL "物料 10008733L01
AND RGEKZ = 'X' "反冲
AND XLOEK = '' "删除
AND RSNUM = GOODSMVT_ITEM-RESERV_NO "预留号 刘欣添加 2015-09-15
AND RSPOS = GOODSMVT_ITEM-RES_ITEM . "项目 刘欣添加 2015-09-15
结果:
优化前语句,一个生产订单测试:
优化后语句时间:
传入生产系统后,性能提升太多,6个小时的抓数据时间,缩短为10分钟。
针对SAP系统中ZPPR0001_NEW生产订单批量报工程序运行速度慢的问题,通过优化SQL查询语句,在查询条件中加入额外关键字,显著提升了程序效率,将原本6小时的数据处理时间缩短至10分钟。
286

被折叠的 条评论
为什么被折叠?



