ABAP 对RESB表取数性能影响

来源:互联网 发布:godaddy域名注册流程 编辑:程序博客网 时间:2024/04/29 06:20

系统环境:

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









0 0