SAPABAP性能优化.ppt

上传人:小飞机 文档编号:5447153 上传时间:2023-07-08 格式:PPT 页数:27 大小:644.50KB
返回 下载 相关 举报
SAPABAP性能优化.ppt_第1页
第1页 / 共27页
SAPABAP性能优化.ppt_第2页
第2页 / 共27页
SAPABAP性能优化.ppt_第3页
第3页 / 共27页
SAPABAP性能优化.ppt_第4页
第4页 / 共27页
SAPABAP性能优化.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《SAPABAP性能优化.ppt》由会员分享,可在线阅读,更多相关《SAPABAP性能优化.ppt(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.使用 BINARYSEARCH 二分查找算法;5.使用较高效的 DELETE ADJACENT DUPLICATES FROM 删除内表邻近重复记录;6.使用较高效的COLLECT语句对记录进行聚集加总;7.嵌套loop语句,可以用先read在loop at from。,减低CPU负载-1,使用WHERE条件减少循环次数.减少循环次数可以减少CPU操作次数,减少操作时间LOOP AT WHERE,SELECTION-

3、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,检查元素名称匹配;2,检查元素类型匹配;3,

4、元素类型转换;,SELECT*INTOCORRESPONDINGFIELDSOFTABLEitabFROMvbakWHEREvbeln=p_vbeln.LOOP AT itab1 INTO wa.MOVE-CORRESPONDINGwatoitab2.APPEND itab2.ENDLOOP.,SELECTvbeln posnrINTOTABLEitabFROMvbak WHEREvbeln=p_vbeln.Itab2=itab1.,SELECTvbeln as fld1 posnras fld2INTOTABLE itab FROMvbakWHERE vbeln=p_vbeln.LOOP A

5、T itab1 INTO wa.Itab2-fld1=wa-matnr.Itab2-fld2=wa-meins APPEND itab2.ENDLOOP.,不推荐,推荐,推荐,第 7 页,降低CPU负载-3,使用SORTED TABLE 和 HASHED TABLE表类型.,第 8 页,降低CPU负载-4,使用 BINARYSEARCH 二分查找算法.一般线性查找的缺点就是耗时,而二分查找比线性查找更高效.,READ TABLE itab2 WITH KEY vbeln=Itab1-vbeln AND posnr=itab1-posnr.时间复杂度为 O(n)阶.,SORT TABLE ita

6、b2 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 删除内表邻近重复记录.,注意:使用前必须要对内表先进按索引排序SORT ITAB BY XXXX.,第 10 页,降低CPU负载-6,使用较高效的COLLECT语句对记录进行聚集加

7、总.,注意:COLLECT语句的效率只体现在当你使用的是顺序表和哈希表的时候,或者内表经过有效排序之后。否则当内表数据过多时,检索时间会很长,一般不推荐使用在记录条数非常多的标准表。,第 11 页,降低CPU负载-7,嵌套loop语句,可以用先read在loop at from sy-tabix方法处理,可以有效减少循环次数。,第 12 页,第 13 页,四.怎样降低数据库负载,侧重于SQL语句逻辑:减少IO操作,1.避免使用SELECT ENDSELECT语句;2.避免使用SELECT*;3.使用FOR ALL ENTRIES IN 语句联接数据表和内表;4.使用索引提高查询效率;5.避免使

8、用SQL 的ORDER BY 语句,SORT语句会更高效;6.使用SQL聚合函数MAX,MIN,COUNT,AVG,SUM。,降低数据库负载-1,避免使用SELECT ENDSELECT语句.SELECT ENDSELECT语句其实是一个循环体,为了减少循环次数,建议使用一次性TABLE赋值赋值.,SELECT ebelnINTOit_ebeln-ekkebelnFROMekkoWHEREebeln=p_ebeln.APPENDit_ebeln.ENDSELECT.,SELECTebeln AS ekknebelnINTOTABLE it_ebelnFROMekkoWHEREebeln=p_e

9、beln.,不推荐,推荐,第 14 页,降低数据库负载-2,避免使用SELECT*.,第 15 页,降低数据库负载-3.1,使用FOR ALL ENTRIES IN 语句联接数据表和内表.,第 16 页,降低数据库负载-3.2,使用FOR ALL ENTRIES IN 语句联接数据表和内表.,第 17 页,降低数据库负载-3.3,使用FOR ALL ENTRIES IN 语句联接数据表和内表.使用的时机:1,簇表是禁止JOIN的表类型,当需要联接 簇表查询数据时;2,JOIN超过3个表会出现性能问题,当使用 JOIN联接的表超过3个时;,SELECT INTO itab FROM EKKO J

10、OIN EKPO ON EKKOEBELN=EKPOEBELN JOIN EKKN ON JOIN MARA ON,SELECT INTO TABLE itab_ekko FROM ekko.SELECT INTO TABLE itab_ekpo FROM ekpo FOR ALL ENTERIS IN itab_ekko WHERE ebeln=itab_ekko-ebeln LOOP AT itab_ekko.READ itab_ekpo WITH KEY ebeln=itab_ekko.APPEND itab.ENDLOOP.,不推荐,推荐,第 18 页,降低数据库负载-4.1,使用索引

11、提高查询效率.,第 19 页,降低数据库负载-4.2,使用索引提高查询效率.,SQL查询语句的WHERE条件按照INDEX的顺序书写。SELECT FROM EKKOWHERE MANDT=SY-MANDTAND LIFNR=XXXXXXXAND EKORG=2701AND EKGRP=XXX.,第 20 页,降低数据库负载-5,避免使用SQL 的ORDER BY 语句,SORT语句会更高效.,第 21 页,降低数据库负载-6,使用SQL聚合函数MAX,MIN,COUNT,AVG,SUM.,第 22 页,第 23 页,五.怎样降低程序内存使用,侧重于内表的操作技巧:减少内表大小,1.使用OCC

12、URS n 与 OCCURS 0 的区别;2.使用SELECT PACKAGE SIZE n 分段查询数据,减低数据库缓存负担;3.使用完成后及时清空释放内表。,程序内存使用的优化-1,使用OCCURS n 与 OCCURS 0 的区别。OCCURS n 代表初始化内表的空间大小为n(空间固定),当内表存储记录条数超出n时,系统将依靠页面文件存放超出部分的数据。当系统内存资源十分紧缺的时候,我们可以使用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备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号