北方联合电力有限责任公司(以下简称北方公司)采用了SAP公司的ERP产品(以下简称ERP系统),实施了财务和物资两大模块并通过接口与生产管理系统(BFS++)、资金支付系统、物资主数据管理系统等集成,实现了北方联合电力公司生产、物资、财务的一体化管理。
随着ERP系统的持续运行,数据量越来越大,对基于ABAP/4平台开发的程序运行速度产生很大的影响,甚至某些程序运行执行时会因超时而退出(ERP系统前台执行一个命令时间最长为600ms,超出这个时间命令还没有执行完的程序将超时而退出),影响业务应用效果,因此对程序进行合理优化显得尤为重要。
所谓ABAP/4程序优化,就是在程序改进时,通过选择最优数据结构、最优执行语句,设计最优数据库读取、最优执行流程,达到程序执行速度最快、占用系统资源最少的目的。
如何分析ABAP/4开发的程序性能
在ERP系统中可以通过使用事务代码SE30对ABAP/4程序执行时间进行分析,找出程序执行慢的部分。ABAP、Database、System三个阶段的执行时间对效能的优先级为Database→System→ABAP,要依序排除哪部分影响性能(如图1所示)。点击提示技巧,可以查看一些SAP所提供的效率比较。输入事务代码、程序名称、功能模块名称,点击Execute,执行程序,执行完程序后,点击Analyze,可以查看程序的执行效率(如图2所示)。通过执行结果可以清晰看到该程序在系统中运行时ABAP、Database、System三个方面需要花费的时间,点击左上角 按钮,可以进一步查看每条语句的执行效率(如图3所示)。针对语句进行分析,即可对语句或方法进行优化。
影响ABAP/4程序性能的因素
通过对程序运行时间进行性能分析,可以明显看到,在ERP系统上线运行初期,由于业务和数据量都比较少,程序运行速度比较快,很难发现一些程序的性能瓶颈。随着业务流程的变化和数据量的不断增加,程序执行效率变得越来越低。
ERP系统运行1~2年后,数据库中数据增加,数据库表中记录的条数越来越多,导致从数据库中读取数据时间增加,同时也会使数据库产生大量的冗余数据,从而降低了报表执行效率。
程序执行时检索条件设置不合理,在默认条件中不做限定将有大量数据被读取,这些数据的加工整理并输出将会很耗时,当数据库表中数据条目越多耗时越明显,甚至程序无法运行出正确的结果。
在编写数据库查询SQL语句时,并没有进行必要的优化,对海量数据而言,经过优化的SQL语句可能比未优化的SQL语句查询效率要高很多倍,特别对多表之间的联合查询尤其如此。另外,SQL语句中使用关键字IN作为查询条件语句的效率都相对较低。
ERP系统是一个复杂的信息系统,从数据库表中取数的方法可能不止一种,不同的取数方法对程序的运行效率有很大影响。如对于很多报表所需要的期初数据,如果系统中有存放这批数据的表,那么从中直接读取则比通过大量数据记录推算快得多。
在ABAP/4程序的代码设计中,其算法的优劣也是决定报表执行时间的关键因素之一。程序中选择、循环和嵌套等语句的正确使用,数据的转换和计算逻辑,程序的同步异步机制及对数据加锁解锁方式等都对报表执行效率有很大影响。
优化ABAP/4程序性能的基本原则
首先要减少对数据库的访问。频繁访问数据库,对程序性能的影响显而易见,因为这增加了数据库的开销和网络的往返次数,所以在一个程序中,访问数据库的次数越少越好。有时宁愿一次多返回一些数据,也不要增加访问次数。
其次要减少网络往返的数据量。如果传输的数据量很大,那么网络延迟的时间就会很明显。
最后要减少程序的循环次数。循环会增加CPU的负载。虽然每次循环执行的时间比较短,但是随着循环次数的增加,累计的处理时间就很长。
优化程序性能的方法
优化数据库系统。随着业务数据的不断增加,数据量将逐渐增大。同时数据库也会产生很多碎片,导致系统性能减弱,浪费大量表空间。而且数据表记录经过多次删除、添加会使得日志文件增大,诸如此类原因都会直接影响数据库的运行效率。因此数据库管理员(DBA)必须定期检查系统的状态,如CPU、内存、交换、磁盘的利用率,同时进行数据库整理,如删除不必要的文件、整理磁盘、清理日志文件。在必要时提供更多应用服务器负载分流,使数据库运行在一个高效稳定的状态。
优化ABAP/4程序。优化方法和渠道很多,例如通过内表(Internal Table)处理来减少对数据库的访问,通过缓冲池模式减少对数据库的访问,减少循环嵌套的层数,合理使用READ TABLE等。
优化运行方式。对于非实时数据查询报表,可以考虑放到后台运行。非实时数据查询,可以通过自定义数据表存储运算结果,让用户直接从自定义表抽取报表数据,大大提升查询响应速度。
优化程序检索界面。注意避免完全无输入限制的界面,这样的查询方式可能会导致全表扫描,带来运行效能问题。合理设置检索方式,在满足业务需求的前提下尽可能输入特定范围的检索,限制业务查询的范围,不仅可以减少程序运行时间,还为整个ERP系统节约了大量的系统资源。
大多数ABAP/4程序是可以进行性能优化的。目前一些优化方法已经在北方公司ERP系统中应用,取得了明显的效果。经过性能优化的ABAP/4程序提高了终端用户业务操作效率,对ERP系统整体高效可靠运行有着非常重要的作用。