《SAPABAP性能优化》PPT课件.ppt_第1页
《SAPABAP性能优化》PPT课件.ppt_第2页
《SAPABAP性能优化》PPT课件.ppt_第3页
《SAPABAP性能优化》PPT课件.ppt_第4页
《SAPABAP性能优化》PPT课件.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ABAP程序性能优化,目录,一. 前言 二. 程序性能优化的重点 三. 怎样降低CPU负载 四. 怎样降低DB负载 五. 怎样降低程序内存使用 六. 怎样检查程序性能,第 2 页,本文提供一些常用的方法,用以提高ABAP程序运行速度、降低系统荷载、节省内存开销。但这些方法不是孤立的,我们的最终的目的是在三者之间达到一种平衡。,一.前言,第 3 页,第 4 页,二. 程序性能效率优化的重点,降低CPU负载(减少循环次数) 降低数据库负载(减少IO操作) 内存使用的优化(减少内表大小),SAP系统三层架构,第 5 页,三. 怎样降低CPU负载,侧重于程序语句处理逻辑:减少循环次数,1.使用WHERE条件减少循环次数; 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操作次数,减少操作时间 LOOP 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, 检查元素名称匹配; 2, 检查元素类型匹配; 3,元素类型转换;,SELECT * INTO CORRESPONDING FIELDS OF TABLE itab FROM vbak WHERE 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 fld2 INTO TABLE itab FROM vbak WHERE vbeln = p_vbeln. LOOP AT itab1 INTO wa. Itab2-fld1 = wa-matnr. Itab2-fld2 = wa-meins APPEND itab2. ENDLOOP.,不推荐,推荐,推荐,第 7 页,降低CPU负载-3,使用SORTED TABLE 和 HASHED TABLE表类型.,第 8 页,降低CPU负载-4,使用 BINARY SEARCH 二分查找算法. 一般线性查找的缺点就是耗时, 而二分查找比线性查找更高效.,READ TABLE itab2 WITH KEY vbeln = Itab1-vbeln 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 删除内表邻近重复记录.,注意:使用前必须要对内表先进按索引排序 SORT ITAB BY XXXX.,第 10 页,降低CPU负载-6,使用较高效的COLLECT语句对记录进行聚集加总.,注意: 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.避免使用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 ebeln = 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 语句联接数据表和内表. 使用的时机: 1, 簇表是禁止JOIN的表类型, 当需要联接 簇表查询数据时; 2, JOIN超过3个表会出现性能问题, 当使用 JOIN联接的表超过3个时;,SELECT INTO itab FROM EKKO JOIN 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,使用索引提高查询效率.,第 19 页,降低数据库负载-4.2,使用索引提高查询效率.,SQL查询语句的WHERE条件按照INDEX的顺序书写。 SELECT FROM EKKO WHERE MANDT = SY-MANDT AND LIFNR = XXXXXXX AND EKORG = 2701 AND EKGRP = XXX ,第 20 页,降低数据库负载-5,避免使用SQL 的ORDER 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时, 系统将依靠页面文件存放超出部分的数据。 当系统内存资源十分紧缺的时候, 我们可以使用OCCURS n的初始化方法, 但是这样的效率稍微慢。 OCCURS 0 代表初始化内表的空间大小为无限,当内表存储记录条数不断增加时, 内表所使用的内存空间不断扩大, 直到系统无法分配为止。 使用内存比使用页面交换更快一些, 但是要考虑系统的资源状态。,第 24 页,程序内存使用的优化-2,使用SELECT PACKAGE SIZE n 分段查询数据,减低数据库缓存负担. SELECT INTO T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论