企业ABAP程序性能优化研究

时间:2022-06-26 07:38:24

企业ABAP程序性能优化研究

摘 要:近年来钢铁行业形势一直处于低迷状态,不少钢铁企业陷入亏损局面。面对着严峻的形势,利用信息化技术提高生产自动化、管理科学化是增加企业的竞争力的有效方法。本文主要对企业信息化建设中用户使用的自开发abap程序性能的调优做了深入研究,提升程序的执行效率,使信息系统达到快速、稳定运行的效果。

关键词:ABAP;性能优化;二次开发

中图分类号:TP312 文献标识码:A 文章编号:1671-2064(2017)02-0030-01

1 引言

SAP R/3系统是一个基于客户/服务机结构和开放系统的、集成的企业资源计划系统。依业务的灵活性,实际业务需求,SAP平台上需要进行大量的系统二次设计、开发以达到满足业务需求的目的。随着系统应用的时间的增长,系统中数据量成倍增加,如何在海量数据中,使用户的使用效果达到最优、程序执行效率最高,是系统程序开发人员一直要考虑的问题。

2 程序调优方法

2.1 程序逻辑角度

系统工程师首先要充分了解业务需求,针对特定的业务需求制定开发方案,方案简洁,程序效率才会达到最优。例如采购员需要严格按照合同信息进行物品采购。为了检验合同的有效性,可能需要查看某采购组织、采购员、创建日期范围内的相关合同,都做过哪些修改。要实现这一功能有两种方法,一种是根据特定条件先去合同抬头表EKKO中筛选符合条件的合同信息,然后根据范围的合同信息去合同修改历史表CDHDR和CDPOS中取合同修改的相关信息;另外一种是先去合同修改历史表CDHDR和CDPOS中把所有曾经修改的合同信息筛选出来,然后再去合同抬头表EKKO中去除不符合筛选条件的合同。因为合同的修改信息存在于历史表中,数据量巨大,很明显第一种方案程序效率较高,所以程序开发逻辑是判断程序性能是否最优最重要的因素。

2.2 调优工具应用

基于SAP开发平台进行的程序开发工作,可以通过系统自带的工具检测程序性能,其中包括:SE30:主要用于某个事务、程序或功能模块的运行时间分析。这个结果评价界面最重要的信息便是在数据库和应用服务器层的总共运行时间。对于一个ABAP程序来说数据库和系统的运行时间应该比较短,至少不能太大。

ST05性能分析:不仅提供SQL Trace 功能,还可以进行Buffer trace, Enqueue trace 以及RFC trace 等。分析里面是否有重复FETCH一个表,看看FETCH一次是否有超过几十万微妙的时间,这样可以考虑索引是否使用正确,然后是否有重复open多次的,可以考虑是否存在LOOP select。然后还有双击后面的select语句,可以进入去看这个SQL语句的解析。

2.3 注意程序开发语言使用

2.3.1 减少与数据库的交互

访问数据库非常耗时,尽量减少程序与数据库的交互操作。对于取描述字段的需求,可以一次性的把要处理的数据读入到内表中。读取时尽量不用SELECT * INTO CORESPONDING TABLE语句,使用该语句数据库会查询数据库表中所有字段,然后再匹配内表里面的字段,严重影响程序效率。应该使用SELECT...INTO TABLE语句,然后用SORT语句对内表进行排序。针对取到的数据读取时使用语法read binary search二分法进行查找,这样可以大大的提升程序的效率。但是在表字段很多的情况下,尽量不要使用SELECT*返回所有字段值,最好只返回指定字段的值。如果肯定只有一条记录返回,也可以使用SELECT SINGLE来读取记录,但该语法一定不要放在LOOP和SELECT...ENDSELECT里面用。

2.3.2 使用正确的索引

好的索引非常好。不好的索引可能索引比表大,也有的索引让当前程序变快,其它的程序却变慢了。索引会占用额外的数据库空间,还会降低插入/修改的速度(虽然可提高查询速度),所以需要考虑实用性,肯定不是越多越好。如果表中已有类似的索引,则不推荐新建。而对于容量大的、被多个程序访问的表加索引就更要谨慎了,比如VBFA、MSEG、LIPS、VBAP、CDHDR等等。

2.3.3 INNER JOIN的使用

INNER JOIN获取数据时,尽量不要用太多的表关联,特别是大表关联,JOIN超过3个表会出现性能问题。对于MSEG,MKPF,LIPS等表,尽量少用inner join。如果要使用该语法,将有效的查询条件所对应的表放在前面。换言之,让查询第一个表后所得到的结果集就尽可能小。比如有业务需求是查询采购订单的收货情况。需要的数据库表有EKKP、EKPO、EKBE等。再分析业务需求,报表主要查询最近几天创建采购订单的收货情况。那么最有效的限制条件是订单的创建日期,表连接的主表就应该选用EKKO。

2.3.4 使用批量修改内表代替逐行修改

不推荐使用逐行修改内容语法,如下:

LOOP AT GT_AGE.

IF GT_AGE-FLAG IS INITIAL.

GT_AGE-FLAG = ‘X’.

ENDIF.

MODIFY GT_AGE.

ENDLOOP.

推荐使用批量修改内容语法,如下:

GT_AGE-FLAG = ‘X’.MODIFY GT_AGE TRANSPORTING FLAG WHERE FLAG IS INITIAL.

3 结语

随着企业应用信息化系统时间的增长,系统中数据量成倍增加,庞大的数据对程序的运行效率产生巨大的影响,有些程序会因为运行超时而与数据库断开连接,用户需要长时间等待,程序调优工作将会是一个任重道远的工作。做优化不是简单的技术活,既要考虑报表的实际需求,也要考虑企业的业务状况。比如采用零售模式的企业客户量很大,批发模式的企业客户量较小;食品饮料行业的物料号一般不多,而机械行业的物料号则往往多而繁杂;零售业的订单量很大、时间性很强,部分行业则可能订单量小但价值高。只有充分考虑到企业的业务特点,与具体业务相结合,才能更有效地提高报表性能及良好的可扩展性。报表性能的提升不仅可以带来完美的用户体验,最主要可以提高用户应用SAP系统的效率既而提升生产效率,达到SAP系统成为企业高效发展的一枚利器。

上一篇:浅谈信息化技术对机械制造发展的影响 下一篇:《探究杠杆的平衡条件》