SAP ABAP性能优化

上传人:jiups****uk12 文档编号:44704384 上传时间:2018-06-14 格式:PPT 页数:27 大小:1.61MB
返回 下载 相关 举报
SAP ABAP性能优化_第1页
第1页 / 共27页
SAP ABAP性能优化_第2页
第2页 / 共27页
SAP ABAP性能优化_第3页
第3页 / 共27页
SAP ABAP性能优化_第4页
第4页 / 共27页
SAP ABAP性能优化_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《SAP ABAP性能优化》由会员分享,可在线阅读,更多相关《SAP ABAP性能优化(27页珍藏版)》请在金锄头文库上搜索。

1、 ABAP程序性能优化目录一. 前言二. 程序性能优化的重点三. 怎样降低CPU负载四. 怎样降低DB负载五. 怎样降低程序内存使用六. 怎样检查程序性能第 2 页本文提供一些常用的方法,用以提高ABAP程序运行速度 、降低系统荷载、节省内存开销。但这些方法不是孤立 的,我们的最终的目的是在三者之间达到一种平衡。 一.前言第 3 页第 4 页二. 程序性能效率优化的重点 降低CPU负载(减少循环次数) 降低数据库负载(减少IO操作) 内存使用的优化(减少内表大小)SAP系统统三层层架构第 5 页三. 怎样降低CPU负载侧重于程序语句处理逻辑:减少循环次数1.使用WHERE条件减少循环环次数;2

2、.尽量避免使用MOVE-CORRESPONDING 和 INTO CORRESPONDING FIELDS OF;3.使用SORTED TABLE 和 HASHED TABLE表类类型;4.使用 BINARY SEARCH 二分查查找算法;5.使用较较高效的 DELETE ADJACENT DUPLICATES FROM 删删除内表邻邻近重复记录记录 ;6.使用较较高效的COLLECT语语句对记录进对记录进 行聚集加总总 ;7.嵌套loop语语句,可以用先read在loop at from。减低CPU负载-1 使用WHERE条件减少循环次数.减少循环次数可以减少CPU操作次数,减少操作时间LO

3、OP AT WHERE SELECTION-OPTIONS: s_vbeln FOR vbak-vbeln.LOOP AT itab.IF itab-vbeln IN s_vbeln.ENDIF.ENDLOOP.SELECTION-OPTIONS: s_vbeln FOR vbak-vbeln.LOOP AT itab WHERE vbeln IN s_vbeln.ENDLOOP.不推荐推荐第 6 页降低CPU负载-2 尽量避免使用MOVE-CORRESPONDING 和 INTO CORRESPONDING FIELDS OF.CORRESPONDING语句在系统内部存在隐式操作:1, 检查

4、元素名称匹配;2, 检查元素类型匹配;3,元素类型转换;SELECT * INTO CORRESPONDING FIELDS OF TABLE itab FROM vbakWHERE vbeln = p_vbeln. LOOP AT itab1 INTO wa.MOVE-CORRESPONDING wa to itab2. APPEND itab2.ENDLOOP.SELECT vbeln posnr INTO TABLE itab FROM vbak WHERE vbeln = p_vbeln. Itab2 = itab1. SELECT vbeln as fld1 posnr as fld

5、2INTO TABLE itab FROM vbakWHERE vbeln = p_vbeln. LOOP AT itab1 INTO wa.Itab2-fld1 = wa-matnr. Itab2-fld2 = wa-meinsAPPEND itab2.ENDLOOP.不推荐推荐推荐第 7 页降低CPU负载-3 使用SORTED TABLE 和 HASHED TABLE表类型.第 8 页降低CPU负载-4 使用 BINARY SEARCH 二分查找算法.一般线性查找的缺点就是耗时, 而二分查找比线性查找更高效.READ TABLE itab2 WITH KEY vbeln = Itab1-v

6、beln AND posnr = itab1-posnr.时间复杂度为 O(n)阶.SORT TABLE itab2 BY vbeln posnr.READ TABLE itab2 WITH KEY vbeln = Itab1-vbeln AND posnr = itab1-posnr BINARY SEARCH.时间时间 复杂杂度为为O(log n)阶阶。注意: 使用BINARY SEARCH前必 须对须对 内表进进行按索引排序.不推荐推荐第 9 页降低CPU负载-5 使用较高效的 DELETE ADJACENT DUPLICATES FROM 删除内表邻近重复记录.注意:使用前必须须要对对

7、内 表先进进按索引排序SORT ITAB BY XXXX.第 10 页降低CPU负载-6 使用较高效的COLLECT语句对记录进行聚集加总.注意: COLLECT语语句的效率只体现现在当你使用的是顺顺序表和哈希表的时时候, 或者内表经过经过 有效排序之后。否则则当内表数据过过多时时,检检索时间时间 会很长长,一般不推荐使用在记录记录 条数非常多的标标准表。第 11 页降低CPU负载-7 嵌套loop语句,可以用先read在loop at from sy-tabix方法处理,可以有效减少循环 次数。第 12 页第 13 页四. 怎样降低数据库负载侧重于SQL语句逻辑:减少IO操作1.避免使用SE

8、LECT ENDSELECT语语句;2.避免使用SELECT *;3.使用FOR ALL ENTRIES IN 语语句联联接数据表和内表;4.使用索引提高查询查询 效率;5.避免使用SQL 的ORDER BY 语语句, SORT语语句会更高效;6.使用SQL聚合函数MAX, MIN, COUNT, AVG, SUM。降低数据库负载-1 避免使用SELECT ENDSELECT语句.SELECT ENDSELECT语句其实是一个循环体, 为了减少循环次数, 建议使用一次性TABLE赋值赋值.SELECT ebeln INTO it_ebeln-ekkebeln FROM ekko WHERE e

9、beln = p_ebeln .APPEND it_ebeln . ENDSELECT. SELECT ebeln AS ekknebeln INTO TABLE it_ebeln FROM ekko WHERE ebeln = p_ebeln .不推荐推荐第 14 页降低数据库负载-2 避免使用SELECT *.第 15 页降低数据库负载-3.1 使用FOR ALL ENTRIES IN 语句联接数据表和内表.第 16 页降低数据库负载-3.2 使用FOR ALL ENTRIES IN 语句联接数据表和内表.第 17 页降低数据库负载-3.3 使用FOR ALL ENTRIES IN 语句联

10、接数据表和内表.使用的时机:1, 簇表是禁止JOIN的表类型, 当需要联接簇表查询数据时;2, JOIN超过3个表会出现性能问题, 当使用JOIN联接的表超过3个时;SELECT INTO itab FROM EKKO JOIN EKPO ON EKKOEBELN = EKPOEBELNJOIN EKKN ON JOIN MARA ON SELECT INTO TABLE itab_ekko FROM ekko .SELECT INTO TABLE itab_ekpo FROM ekpoFOR ALL ENTERIS IN itab_ekkoWHERE ebeln = itab_ekko-eb

11、eln LOOP AT itab_ekko.READ itab_ekpo WITH KEY ebeln = itab_ekko.APPEND itab.ENDLOOP.不推荐推荐第 18 页降低数据库负载-4.1 使用索引提高查询效率.第 19 页降低数据库负载-4.2 使用索引提高查询效率.SQL查询语查询语 句的WHERE条件按照INDEX的顺顺 序书书写。SELECT FROM EKKOWHERE MANDT = SY-MANDTAND LIFNR = XXXXXXXAND EKORG = 2701AND EKGRP = XXX.第 20 页降低数据库负载-5 避免使用SQL 的ORDE

12、R BY 语句, SORT语句会更高效.第 21 页降低数据库负载-6 使用SQL聚合函数MAX, MIN, COUNT, AVG, SUM.第 22 页第 23 页五. 怎样降低程序内存使用侧重于内表的操作技巧:减少内表大小1.使用OCCURS n 与 OCCURS 0 的区别别;2.使用SELECT PACKAGE SIZE n 分段查询查询 数据,减低数据库缓库缓 存负负担;3.使用完成后及时时清空释释放内表。程序内存使用的优化-1 使用OCCURS n 与 OCCURS 0 的区别。OCCURS n 代表初始化内表的空间大小为n(空间固定), 当内表存储记录条数超出n时, 系统将依靠页

13、面文件存放超出部分的数据。 当系统内存资源十分紧缺的时候, 我们可以 使用OCCURS n的初始化方法, 但是这样的效率稍微慢。OCCURS 0 代表初始化内表的空间大小为无限,当内表存储记录条数不断增加时, 内表所使 用的内存空间不断扩大, 直到系统无法分配为止。 使用内存比使用页面交换更快一些, 但是要考虑系统的资源状态。第 24 页程序内存使用的优化-2 使用SELECT PACKAGE SIZE n 分段查询数据,减低数据库缓存负担.SELECT INTO TABLE itab PACKAGE SIZE 100 FROM VABK 该语句实现没次打开DB会话时, 往应用服务器上传输100条记录, 然后关闭会话, 刷新缓 存。 用于在数据库缓存资源紧缺的情况使用。第 25 页程序内存使用的优化-3 使用完成后及时清空释放内表Refresh ITAB;Free ITAB.可以有效减少内存的持续占用,从而提高内存分配使用小率。第 26 页结束句谢谢!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号