ABAP 报表程序调优

ABAP 报表程序调优

http://blog.sina.com.cn/s/blog_7057e5240100m7wm.html

 

临上线了,需求还在改,报表也得改,需求满足了,程序性能又不满足了,净折腾啊. 可客户是付钱的上帝,所以程序要调优要改进,不然,要钱不给!

SAP 系统是经典的三层架构,分为DB, 应用服务器,展示层三层.ABAP程序运行在应用服务器层,访问的数据存储在DB,而我们要做的就是把数据从DB中取出来,然后送到展示层以展现给用户.而这里DB是作为集中式资源存在的,难以水平扩展,而应用服务器则可以水平进行扩展以满足系统性能需求.所以,调优要尽可能地优先在应用服务器做,其次在DB层.而报表程序中,往往对数据库的访问会占用大部分的程序运行时间,在实现业务逻辑时,要考虑到OpenSQL的效率问题.

1. 避免Table full scan, 尽可能的使用表的索引.   在使用索引时,索引的字段要匹配其顺序,并且索引的字段要尽可能靠前. 可以使用ST05查看程序使用索引的情况.      另外,有一些表并没有直接的索引字段,譬如SD中的表如VBRK等,可以通过索引表VBRKPA等预先取得主键再去访问VBRK.   有意思的是在 的DDIC透明表在ORACLE中并没有真正的主键,而是将DDIC的主键字段作为primary index使用的.
2.   对于FOR ALL ENTRIES 的使用   它一般是根据内表中记录的数量分割成多条SQL语句来执行,所以当内表比较大时,使用FOR ALL ENTRIES对程序运行时间有影响,使用时多考虑.   另外,连接的内表中不要有重复纪录,这样会重复对数据库的访问.
3. 直接将数据缓存在内表    譬如在访问如Sales office等数据量不大的主数据表时,可以将记录预先读出.

4. 使用 database hints    这是杀招,容易伤人,谨慎使用.  它是一些基于特定数据库的优化技巧,使用这些技巧可以影响数据库优化器对表使用的访问策略. 注意,ABAP语法并不能检查它的对错,一定要保证hints的正确性,另外它只能用于透明表.   示例:    %_HINTS ORACLE 'LEADING(T_01) USE_NL (T_00 T_02)'.     使用T_01作为首要访问的表,并将T_00作为内部表联接.  Note 129385 - Database hints in Open SQL  Note 130480 - Database Hints in Open SQL for Oracle

posted @ 2013-10-02 23:10  VerySky  阅读(1095)  评论(0)    收藏  举报