ABAP 报表程序OpenSQL性能调优

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

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值