SAP系统性能优化方法探究

(整期优先)网络出版时间:2021-08-30
/ 2

SAP系统性能优化方法探究

许景勋

四川中电启明星信息技术有限公司,四川成都 610031

摘要: SAP系统为企业提供了强大的业务管理解决方案,全球应用广泛。但各企业的业务背景不同,用户定制化的需求也各异,需要ABAP开发语言在系统上进行二次开发。本文分析了影响ABAP程序性能的诸多因素,结合系统标准功能,深入研究了多种程序优化的技术方法,通过实践检验,达到了提升SAP系统整体性能的目的。

关键词: 性能优化;ABAP开发语言;SAP系统;二次开发

  1. 影响ABAP程序性能的因素

SAP系统由底层的文件系统、数据库管理系统、应用服务器、表现层的UI构成[1]。影响ABAP程序性能的因素有很多,主要有以下几个:

(1)硬件性能:数据库服务器、应用服务器的处理能力,客户端电脑的性能等都会影响ABAP程序的性能。

(2)网络带宽:ABAP 程序需要在在服务器之间、服务器与客户端之间传递数据,网络吞吐量的高低直接影响程序的性能[2]

(3)服务器不合理的配置:SAP 服务器不合理的配置,特别是内存的配置,影响 ABAP 程序的性能。

(4)数据库表不合理的索引:数据库表索引能够提高查询数据的速度,但同时也会增加服务器选择索引的成本和更新索引的开销。因此,没有索引和滥建索引都会影响 ABAP 程序的性能。

(5)程序处理的数据量:如果随着数据量的增加,程序的执行时间呈对数方式提升,则说明程序的性能较好,如果呈指数方式上升,则程序性能很差。

(6)程序不合理的代码:不合理的 ABAP 程序代码也会影响程序执行的性能。

2. ABAP程序性能优化的基本原则

(1)减少对数据库的访问

访问数据库消耗非常多的时间,频繁的访问数据库,对程序性能的影响是显而易见的,因为这意味着数据库开销的增加和网络往返次数的增加,所以在一个程序中,访问数据库的次数越少越好。宁可一次多返回一些数据,也不要增加访问次数[1-2]

(2)减少网络往返的数据量

网络传输也能很明显的影响程序的执行时间,如果传输的数据量很大,那么网络延迟的时间就会很明显。

(3)减少循环次数

循环会增加 CPU 的负载,虽然每次循环执行的时间比较短,但是随着循环次数的增加,累计的处理时间就很长。

3.程序性能优化的方法

(1)通过缓冲池模式减少对数据库的访问

把经常使用的固定大小的数据一次性的读取到Internal Table中缓冲,需要的时候直接从缓冲中读取,避免重复访问数据库,这样也可以有效减少Inner Join的数量。

(2)减少循环嵌套的层数

循环嵌套会造成循环次数倍数级别的增长,造成程序执行缓慢,所以要尽量避免循环嵌套的产生,特别避免产生三层以上的嵌套循环。但有时候难免需要嵌套循环,这个时候必须预估每个循环最大可能发生的次数。如果把那些循环次数相对固定的称为固定次数循环,那些随着数据量的增加而循环次数明显增加的称为可变次数循环,那么一个嵌套循环应该只出现一个可变次数循环,这样才能保证循环次数的可控。

尽量避免在循环中使用Select或者读取Standard Table,因为这两种方式读取数据的效率比较低,多次调用,累加的时间是巨大的。

(3)增加表索引

增加条件字段的索引能够明显增加查询数据的速度。如果索引语法有误,在Oracle层会当作注释处理掉。ABAP中常见有两种用法有以下两种:

全表扫描:%_HINTS ORACLE 'FULL("Table_Name")

指定索引:%_HINTS ORACLE 'INDEX("Table_Name" " Index_Name")'

(4)增加后台任务

数据量的增加肯定会使程序运行时间增加。通常那些运行时间不合理增长的程序能够通过优化改善性能,但是运行时间合理增长的程序,就很难优化,对此可以通过后台任务运行程序,减少前台获取查询的时间。

(5)Buffer读取数据

大部分表都有Buffer,程序从底层数据库表获取的时候,会在应用服务层有数据缓存,因此同一个程序在不同时间先后跑,后面的通常会比较快,因为可以到数据缓存读数。

(6)灵活使用Field-Groups指针

Loop 后面用Assigning 指针的方式,可以省去Append,Modify等操作,这样可以节省空间和时间,对于多层次的排序和显示非常有用。

(7)SQL语句优化

Oracle解析器是按照从右到左的顺序处理From子句中的表名,写在最后的表将被最先处理,在From子句中包含多个表时,必须选择记录条数最少的表作为基础表。Oracle采用自下而上的顺序解析Where子句,因此表之间的连接必须写在其他Where条件之前,可以过滤掉最大数量记录的条件必须写在Where子句的末尾。

(8)多使用Commit Work

在程序语法允许的情况下,及时使用Commit Work。这样可以释放掉回滚段的数据信息、各种被占用的锁、Log Buffer空间及Oracle为管理以上资源的内部花费,这些资源的释放会提高程序的性能。

(9)通过内部函数提高SQL效率

系统封装了很多标准的取数函数,执行效率也非常的高,涉及复杂取数过程,尽可能的使用标准函数,避免过多的代码取数,减少程序执行时间。

(10)异步多线程调用

同步调用是程序进行单线程执行,异步调用是程序进行多线程执行。异步调用:Call Function 'AAA' Starting NewTask Destination In Group Performing On End Of Task。

3.结论

总之,分析影响ABAP程序性能的因素,按照ABAP程序性能优化的基本原则,通过各种性能优化的技术方法及实践检验,可以提升SAP系统的整体性能。


参考文献

[1]东方先生.SAP ABAP开发技术详解(实例篇)[M].电子工业出版社,2014.

[2]黄佳.SAP高级应用开发[M].人民邮电出版社,2008.