ABAP 对RESB表取数性能影响

针对SAP系统中ZPPR0001_NEW生产订单批量报工程序运行速度慢的问题,通过优化SQL查询语句,在查询条件中加入额外关键字,显著提升了程序效率,将原本6小时的数据处理时间缩短至10分钟。

系统环境:

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分钟。









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值