SAP ABAP程序性能调优介绍_第1页
SAP ABAP程序性能调优介绍_第2页
SAP ABAP程序性能调优介绍_第3页
SAP ABAP程序性能调优介绍_第4页
SAP ABAP程序性能调优介绍_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1、SAP ABAP程序性能调优介绍技术创新 变革未来目录用户交互过程系统监控SM50/SM66ST02ST03ST04ST06程序跟踪ABAP TraceSATSQL TraceST05程序调优内表相关内表类型Binary SearchSecondary KeyLoop Where内表JoinFunction内表传递SQL优化For all entries in执行顺序索引正确的索引和字段顺序正确的命中字段大SQL/Hints多进程处理2SAP用户与服务器交互过程Pres. ServerNetworkSAP Application ServerSAP ExtendedMemoryTable Bu

2、ffersProgram BufferSAP Roll MemoryDispatcherQueueDispatcherWork ProcessWork ProcessWork ProcessNetworkDB ProcessDB ProcessDB ProcessDatabase ServerDBDatabase Buffers3Work Process DB ProcessSAP用户与服务器交互过程4用户请求发送到分发器的队列分发器队列将操作请求分配给空闲的分发器分发器将用户请求分配给SAP的工作进程SAP的工作进程与用户在内存的信息进行数据交换SAP的工作进程与数据库表缓存和程序缓存进行数

3、据交换SAP的工作进程将处理任务移交给数据库进程数据库进程与数据库缓存进行数据交换数据库缓存与数据库进行数据交换服务器响应时间NetworkNetworkPres. ServerSAP Application ServerDatabase ServerUser starts transactionDispatcher receives requestWait time Roll time Load timeProcessing time(1)Database Time(1)Database Time(2)Processing time(2)Processing time(3)Rollout f

4、rom processRollout timeGUI displays resultResponse time5SAP系统性能指标参考6时间参考值Wait time 10% response timeMain menu(Choose transaction profile) 100 msAverage roll-in time 20 msAverage roll wait time 200 msAverage load (and generation) time10 % of response time (最后的加载 分析最新的事务性能可按日期、周、月查看历史性能9SM50/SM66 工作进程

5、监控用于监控工作进程状态查看处于工作状态的进程的表访问和SQL语句可中断进程进入调试状态10ST02 查看SAP内存占用查看扩展内存查看CurUse和In Mem查看Heap Memory查看个人内存占用双击Extended Memory - 模式11ST04 数据库性能查看Data Buffer Quality % 99.5%Session Monitor 查看当前数据库session点击Explain查看SQL运行分析12ST04 数据库性能查看Space-Segments-Top Size / Top Growth查看数据量最大的表13ST06 操作系统性能查看CPU利用率内存利用率尽量

6、避免用完所有物理内存避免使用虚拟内存和SWAP14SAT程序性能跟踪分析In Dialog- 最常用直接跟踪事务、程序和函数In Parallel Session直接跟踪某个SessionFor User/Service后台跟踪某个用户或者程序15SAT程序性能跟踪分析测量精确性高:对特定区域的高精度测量方式,降低测量错误的可能性,但测量时间会变短低:测量时间及测试范围更大,但测试错误的可能性高16SAT程序性能跟踪分析Variant设置个人的Variant适当增加Size Limits和Maximum Execution Time(最大不可超过4293s)设置跟踪内表选项17SAT程序性能跟

7、踪分析In Dialog18SAT程序性能跟踪分析In Parallel Session跟踪当前工作进程19SAT程序性能跟踪分析For User/Service20SAT程序性能跟踪分析Evalute 显示分析结果显示Net%最多的语句,双击显示代码21SAT程序性能跟踪分析Tips & Tricks特别是SQL和Internal Table22ST05 SQL Trace按SQL语句汇总Explain23内表类型Any TableIndex TablesStandard TableSorted TableHashed Table24内表的定义25内表的定义声明:it_tab 要定义的内表,

8、line_type参照结构或类型,key_def要定义的关 键值 预定义一个类型,方便表定义使用types: begin of ty_mseg,mblnr like mseg-mblnr, mjahr like mseg-mjahr, zeile like mseg-zeile,end of ty_mseg.STANDARD(标准表)定义Types or DATA it_tab TYPE STANDARD TABLE OF line_typeWITH NON-UNIQUE KEY key_def .STANDARD标准表: key 不唯一只能指定为NON-UNIQUE,可以不指定,不指定默认就

9、是NON-UNIQUE。 不能用“关键字” 来确定内表 的行,只能用“索引”来确定内表的行。注意:在定义standard类型的内表时,如果使用 WITH DEFAULT KEY. 系统会自动将 内表中的字符类型字段(c,n,d,t,x,string,xstring)组合成table key.data: it_mseg_s type standard table of ty_mseg with key mblnr mjahr zeile.内表的定义26SORTED(排序表)定义Types or DATA it_tab TYPE SORTED TABLE OF line_typeWITH UNIQ

10、UE|NON-UNIQUEKEY key_def .SORTED 排序表: 可以指定key 是否唯一可以使用NON-UNIQUE和UNIQUE关键字。可以通过“关键字”和“索引”来确 定内表的行。data: it_mseg_st type sorted table of ty_mseg with unique/non-unique key mblnr mjahr zeile.HASH(哈希表)定义Types or DATA it_tab TYPE HASHED TABLE OF line_typeWITH UNIQUEKEY key_def .HASH 哈希表:KEY必须是唯一不能用NON-U

11、NIQUE关键字,且必须指定UNIQUE关键字。如果允许相同的关键字记录,则hash值就相同,所以只能是UNIQUE,不允许重复的关键字存在。不能用“索引”来 确定内表的行,只能用“关键字”来确定内表的行。data: it_mseg_h type hashed table of ty_mseg with unique key mblnr mjahr zeile.内表区别27内表结构和访问方式区别STANDARD 标准内表:系统为该表的每一行生成一个逻辑索引(linearindex 线性索引); 程序对内表中行的寻址操作可以通过关键字或者索引进行SORTED 排序内表:也具有一个标准内表逻辑索引

12、,不同之处在于排序表总是按其关键字升序排列以后再存储; 其访问方式与标准表相同HASH 哈希内表:没有索引;只能靠关键字进行寻址,系统用哈希算法管理表中的数据(系统使用关键字通过哈希算法得 到 一个哈希值,通过该值进行寻址等存储管理)标准表排序表哈希表索引访问允许允许不允许关键字访问允许允许允许相同值关键字行可重复可重复或不可重复不可重复推荐访问方式主要通过索引主要通过关键字只能通过关键字内表的表键28TABLE KEY定义内表的一组字段,用于定位内表的数据行表键分类(按表类型)standard key(标准键)内表的特殊主键,可显性或隐性定义,默认是隐性的显性定义时,在TYPES或DATA定

13、义时指定字段,同时用UNIQUE或NON-UNIQUE KEY 指定是否为 唯一表键;在TYPES或DATA定义时,不指定任何字段,即默认主键,为隐性定义。隐性定义时,结构化的内表 的standard key由内表所有字段组成(all components withcharacter-like andbyte-like data types), 否则为空,即不包含任何字段空字段的TABLE KEY不适用于SORT TABLE和HASH TABLE。SORT KEY(排序键)为SORT TABLE定义的TABLE KEY,优化过的TABLE KEY,键值写保护HASH KEY(哈希键)为HASH

14、 TABLE定义的TABLE KEY,优化过的TABLE KEY,键值写保护内表的表键29表键分类(安表键作用)primary table keys(主表键):每一个内表都有主键,可以是UNIQUE或NON-UNIQUE KEYSORT TABLE和HASH TABLE的主键字段值是只读的,访问数据是优化过的。 隐性定义时参考standard keysecondary table keys (次表键):hash keys and sorted keys can be declared as secondary table keys.表键分类(按键值是否唯一)UNIQUE KEY(唯一键):键值

15、唯一,键值重复情况下,单行插入时,sy-subrc = 4;多值情况下,ITAB_DUPLICATE_KEY runtime error ;NON-UNIQUE KEY(非唯一键):键值不唯一,可重复内表的表键30Standard keySORT KEYHASH KEYunique keys允许允许允许non-unique keys允许允许不允许Read-OnlyNOYESYESEfficientO(n)O(Log2n)O(1)表键使用性能standard key(标准键)查找方式:线性搜索效率:O(n),n表示内表数据数量SORT KEY(排序键)查找方式:二分法效率:O(Log2n),n表

16、示内表数据数量HASH KEY(哈希键) 查找方式:哈希函数 效率:O(1)内表的表键表键的定义和使用31内表的表键表键的定义和使用32定义如前所述,每个内表均可使用WITH UNIQUE|NON-UNIQUE KEY来指定“主键”,已提高 数据访问速度。除此之外,还可以通过定义Secondary Key,来实现更快的访问和处理, Secondary Key类似于系统索引。声明:预定义一个类型,方便表定义使用TYPES: BEGIN OF ty_vbap,vbeln TYPE vbap-vbeln, posnr TYPE vbap-posnr, matnr TYPE vbap-matnr,33

17、arktx netpr werksTYPE vbap-arktx, TYPE vbap-netpr, TYPE vbap-werks,END OF ty_vbap.Types or DATA it_tab TYPE STANDARD TABLE OF ty_vbapWITH KEY vbeln posnrWITH NON-UNIQUE SORTED KEY matnr_werks COMPONENTS matnr werks.Secondary Key性能比较以处理1000条数据为例,对比使用Secondary Key和不使用Secondary Key的性能差异。Secondary Key34

18、Secondary Key35使用说明Secondary Key36注意Secondary Key适用于大数据内表;更新比较频繁的内表,Secondary Key建议不被使用;Hashed Key比Sorted Key的性能消耗更大,因此在使用Hashed Key时,应注意Key字段个数;一个内表的Secondary Key最多可以有15个。内表区别37内表查找算法区别STANDARD 标准内表:使用索引的查找按索引直接找到对应的数据,索引查找是最快的查找(由于大多数内表数据 来源于数据库 ,程序使用中索引一般不能确定而无法使用) ;使用table key的查找方式为 table scan 全

19、表扫描READ TABLE it_mseg_s with key mblnr = ? mjahr = ? zeile = ? .在read之前进行排序,可以使用二分法查找SORT TABLE it_mseg by mblnr mjahr zeile.READ TABLE it_mseg_s with key mblnr = ? mjahr = ? zeile = ? BINARY SEARCH.SORTED 排序内表:使用table key 在遵循; left-aligned 从左至右匹配, nNote gaps 没有间隔,使用”=” 填充 字段时, 使用 二分查找法 ,其它情况下 使用 ta

20、ble scan查找READ TABLE it_mseg_st with key mblnr = ? mjahr = ? zeile = ? BINARY SEARCH.HASH 哈希内表:只能通过key访问单条记录,系统使用哈希算法查找需要的数据,其查找速度与具体行数无关READ TABLE it_mseg_h with table key mblnr = ? mjahr = ? zeile = ? .内表查找算法性能分析STANDARD 标准内表:索引查找可直接定位一行数据(推荐使用,但大多情况下索引未知);table key全表扫描定位一行数据所需要的时间取决于表的行数,并随行数线性增长

21、(此种情况 下推荐先对内表排序在用二分法查找以提高性能);对于标准表的追加和插入性能很高,但重新排序需要成本。SORTED 排序内表:索引查找可直接定位一行数据;table key 定位一行数据所需要的时间取决于表的行数,并随行数对数级增长(系统使用二分检索 查询);对于插入操作,需要重新排序。HASH 哈希内表:定位一行数据只能通过table key进行,因而哈希表中的关键字必须定义为特有关键字,这意味 者关键字段相同的两行数据不能出现在同一个哈希表中,系统使用哈希算法查找需要的数据,其查找速度与具体行数无关。38内表的性能分析内表的选型39内表一般选型标准STANDARD 标准内表:无唯一

22、主键需要多次根据不同字段排序 需要排倒序SORTED 排序内表:无唯一主键不需要频繁写入HASH 哈希内表:有唯一主键不需要使用行号读写使用HASH表可以大幅提高性能,次选为Sorted表,使用普通标准表一定 要使用Binary SearchLoopWhere40Loop where通常用在另外一个loop中。Loop where要设法使用到Secondary Key。Loop where 如果需要全表检索,如果每次只取部分数据,会占用较多性能替代方法:Sort table by a. Loop at T.Read table Tab with key a = t-a binary searc

23、h. If sy-subrc = 0.tabix = sy-tabix.loop at Tab from tabix.if key变化.exit.endif.处理endloop.Endif. Endloop.内表Join41DATA: I TYPE I.I = 1.LOOP AT ITAB1 INTNote WA1.do.READ TABLE ITAB2 INTNote WA2 INDEX I. IF SY-SUBRC 0. EXIT. ENDIF.IF WA2-K WA1-K. ADD 1 TNote I.ELSEIF WA2-K = WA1-K. .ADD 1 TNote I. EXIT.

24、ELSE.EXIT.endif. enddo.if sy-subrc 0. exit. endif. ENDLOOP.两个内表按Join关键字排序遍历第一个内表只遍历另一内表一次即可将数据关联避免第二个内表多次遍历Function内表传递Call function xxx tables Tab = table1.Tables传递只能传递值,不能传引用这种写法可以废除Call function xxx exporting tab = table1.使用表类型进行内表import和export,表类型可以有多种选择可以传递值,也可以传递引用42For all entries in43Select

25、* from maraFor all entries in itab Where默认情况下,系统按itab中每5条记录执行一次,然后合并结果,删除重复行;如果你要保留重复行记录时,记得在SELECT语句中添加足够键值项目(有必要时,增 加全部键值项 目),以保证结果集中所需重复项目不会被删除;如果要人为合并两次执行的结果,要注意去重;ORDER BY语句和HAVING语句将不能使用;除 COUNT( * )以外的所有合计函数(MAX,MIN,AVG,SUM)都不能使用。SQL Explain查看执行顺序查看使用的索引,以及索引命中字段数,必要时增加where字段以增加命中字段 数避免全表检索和

26、使用错误索引SELECT *INTNoteCORRESPONDING FIELDS OF TABLE t1FROM mseg INNER JOIN mkpfON msegmblnr = mkpfmblnr AND msegmjahr = mkpfmjahr INNER JOIN maktON maktmatnr = msegmatnr AND maktspras = 1WHERE mkpfbudat IN s_budat AND msegwerks IN s_werks.44SQL Explain查看索引,必要时创建新索引一般说来,颗粒度大的字段放在索引前面更有意义45大SQLDEMO: de

27、mo_select_subqueryJOINSubQuery ALL/ANY/SOME/EXISTS/INSum,distinct,avg,maxGroup by / havingOrder byfor all entries in的替代46JOIN语法的使用当需要从多个表格获取需要的字段时,可以使用JOIN语法将表连接起来同时取 出不同表的多个字段,表之间的关联字段通过关键字ON连接(多个连接条件用 AND隔开)。比如现在需要把物料及物料描述同时取到一个内表中输出。注意在选取字段及Where条件中需要指明当前字段所属的表。47INNR JOIN与 OUTER JOIN的区别INNR JOIN

28、需要关联字段在两边表中都不为空才能取到条目,OUTER JOIN只要 左边表有数据的条目都能取到。如下新建一个自建ZMAKT表只加入2个物料。使用INNR JOIN的结果48INNR JOIN与 OUTER JOIN的区别使用LEFT OUTER JOIN 的结果注意不能将LEFT OUTER JOIN的右边表的字段用于WHERE条件中。49Subquery(子查询)50基本概念当一个SQL作为另一个查询的条件时,称之为子查询。子查询可以使用几个简单命令构造功能强大的复合命令。子查询最常用于SELECT-SQL命令的WHERE子句中。语法可用三种语法来创建子查询:comparison ANY

29、| ALL | SOME (sqlstatement)expression NOT IN (sqlstatement)NOT EXISTS (sqlstatement)ANY/ALL/SOME的用法ANY 和 SOME 谓词是同义字,来检索主查询中的记录,这些记录要满足在子查 询中检索的任意记录的比较条件。下列示例将返回全部凭证日期比任意当前用户 创建的采购订单凭证日期大的采购订单号:使用 ALL 谓词只检索主查询中的这些记录,它们满足在子查询中检索的所有记 录的比较条件。如果将前一个示例中的 ANY 改为 ALL,查询只会返回凭证日期 比所有当前用户创建的采购订单凭证日期都大的采购订单号。5

30、1EXISTS 与 IN的用法用 IN 谓词,只能在主查询检索那些在子查询中也包含和它们相同的值的记录。 下列示例返回与当前用户创建的采购订单凭证日期相同的采购订单号。相反,可用 NOT IN 在主查询中检索那些在子查询中没有包含与它们值相同的记 录。EXISTS可以作为一个WHERE条件,决定当前SQL是否能取得数据。有数据则此SQL可以取得数据,无数据则此SQL无法如上图如果 取得数据。52用SUBQUERY替代FOR ALL ENTRIES IN以往的常用的FOR ALL ENTRIES IN写法,在数据量很大的情况下会占用极大的 内存,所以建议在以后的开发中使用JOIN和SUBQUER

31、Y替代FOR ALL ENTRIES IN,但是注意像BSEG这样的聚集表无法使用SUBQUERY。 下面我们对比用两种语法取得由当前用户过账的领料单数据。FOR ALL ENTRIES IN写法SUBQUERY写法FOR ALL ENTRIES IN同样也可用JOIN连接替代,但这里物料凭证抬头文本字段 类型与领料单号不一致,故不能使用JOIN连接两个表。53DISTINCT/SUM/AVG/MAX的用法DISTINCT语法用于SQL语句中可以排除重复条目。SUM/AVG/MAX分别用于计算所取得条目中某字段的和/平均值/最大值,如下 是利用这三个关键字计算3张采购订单净价的和/平均值/最大值。54Group by的用法Group by的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后 针对若干个小区域进行数据处理,使用Group by后取得的数据可以放到内表中。如下可以在前张PPT基础上分别计算3张采购订单净价的和/平均值/最大值。55Having的用法HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT

温馨提示

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

评论

0/150

提交评论