SAP程序性能优化解析
SAPABAP性能优化

SAPABAP性能优化SAPABAP(高级商务应用编程语言)是一种面向SAP应用程序开发的编程语言。
在开发SAPABAP应用程序时,性能优化是非常重要的,可以提高应用程序的响应速度和效率。
以下是一些优化SAPABAP性能的技术和实践。
1.数据库访问优化:在数据库访问方面,以下几种方法可以提高性能:-尽量避免对数据库频繁的读写操作,尽量减少数据库访问的次数。
-使用WHERE语句来限制查询结果的数量,尽量避免返回大量数据。
-使用索引来加速数据库查询操作。
对于频繁访问的字段,可以创建相应的索引。
-避免在循环中进行数据库查询操作,可以将多次查询合并为一次查询,提高效率。
2.代码优化:在编写ABAP代码时,以下几种方法可以提高性能:-避免使用SELECT*语句,尽量只选择需要的字段。
-避免在循环中进行复杂的计算操作,可以将计算提取到循环之外,减少计算次数。
-避免频繁使用长字段,例如TEXT字段,可以将其存储在辅助表中,减少数据库访问次数。
-使用内表来处理数据,避免频繁的数据库访问。
3.内存优化:在使用内存方面,以下几种方法可以提高性能:-尽量减少内存的使用,避免无用的变量和数据结构占用过多内存。
-对于大量数据的处理,可以使用ITAB或HASHEDTABLE来提高效率,尽量避免使用SORTEDTABLE。
-注意内存泄漏问题,及时释放不再使用的内存空间。
4.并发处理优化:在处理并发操作时,以下几种方法可以提高性能:-使用合适的锁策略,避免死锁和长时间的等待。
-尽量避免对同一个资源进行频繁的读写操作,可以考虑其他方法来减少并发冲突。
-使用事务控制来保证数据的一致性和完整性。
-如果可能,可以将并发操作分解成多个较小的操作,减少并发冲突的可能性。
5.缓存优化:在使用缓存方面,以下几种方法可以提高性能:- 使用合适的缓存技术,例如SAP的共享内存(Shared Memory)和缓冲区(Buffers)。
-对于频繁使用的数据,可以将其缓存在共享内存中,提高访问速度。
SAP性能优化的培训V2

© SPRO 2018/ Page 10
SAP性能监控工具
Workload Monitor
ST03 or ST03N
Work Process Overview
Transaction SM50 / SM66
Database
Setup
Monitor
Transaction ST04
Buffers
Transaction ST02
Extended Memory该行的值应该足够大。值e应该小于In memory的值,如果二者 相等就需要增加扩展内存的容量
SAP内存区域
内存区域 1 2 3 4 5 6 7 8 9
© SPRO 2018/ Page 21
作用 SAP Buffer (Program, Screen, Data Dictionary), Extended Memory, Roll Buffer, Paging Buffer Local Roll, Local Page, Heap Memory 主要存储user context,比如程序指针,set/get parameters,权限,内表,报表 主要存储程序相关数据。比方说 extract,Import and Export,call transction之类 对应Roll area,roll-in过程表示从roll buffer中 copy user context到rollArea roll 相反
© SPRO 2018/ Page 13
监控工具--工作进程监控 SM50
© SPRO 2018/ Page 14
监控工具--工作进程监控 SM66
© SPRO 2018/ Page 15
监控工具—数据库监控 ST04
SAP_ABAP性能优化

第 3 页
二. 程序性能效率优化的重点
降低CPU负载(减少循环次数) 降低数据库负载(减少IO操作) 内存使用的优化(减少内表大小)
SAP系统三层架构
第 4 页
三. 怎样降低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。
不推荐
SELECT ebeln AS ekknebeln INTO TABLE it_ebeln FROM ekko WHERE ebeln = p_ebeln .
推荐
第 14 页
降低数据库负载-2
避免使用SELECT *.
第 15 页
降低数据库负载-3.1
使用FOR ALL ENTRIES IN 语句联接数据表和内表.
ABAP程序性能优化
目录
一. 前言 二. 程序性能优化的重点 三. 怎样降低CPU负载 四. 怎样降低DB负载
五. 怎样降低程序内存使用
六. 怎样检查程序性能
第 2 页
一.前言
本文提供一些常用的方法,用以提高ABAP程序运行速度、 降低系统荷载、节省内存开销。但这些方法不是孤立的, 我们的最终的目的是在三者之间达到一种平衡。
SAP性能很慢,如何调整

摘自:/archives/139SAP 性能很慢,怎么调整?(见图)看了SAP 服务器,硬件4个CPU,5G 内存,可是怎么系统很慢,并且在swap 出现太多的红色。
当前Swap 情况:首先确认SAP 服务器多久没有重启了,如果是有几个月没有重启,则ST02的SWAP 一般会出现红色;这个一般重启SAP 可以release swap 的问题。
如果SAP 重启几天后SWAP 就出现红色,根据SAP 服务器的硬件,可以适当调整RZ10的参数。
1、调整前一定先把/usr/sap/DEV/SYS/Profile 进行备份,这个非常重要。
2、对具体哪个参数进行调整,T-code: ST02,在出现红色的地方”双击”进入另一个界面,然后点菜单栏的”当前参数”就能看到它对应的Profile Parameter , Value Unit , Comment ;然后根据它的现有值 x 0.1 = 要调整的数值。
T_Code:RZ10(调整),RZ11(查看参数值、默认值和参数说明)eg: swap 出现红色,双击后对应参数值:rtbb/buffer_length 10000 kB那么在RZ10把这个参数调整为:110003、RZ10调整后要进行激活,激活后要重新启动SAP MMC ;如果出现调整后SAP MMC 无法启动,那么重启SAP 服务器在重启SAP MMC ,如果还是无法起动,那么把刚备份的原Profile 目录覆盖新的Profile 目录,然后再重新调整,根据它的现有值 x 0.05 = 要调整的数值。
调整后再观测ST02的变化,如果原来都没有调整过那一般要按照上面的调整方式调整几次ST02就相对比较正常了。
从 画面看来Swap 比较严重的是Program ,就是 abap/buffersize ,因为没有如 workprocess default allocate 多少 memory 画面可供参考建议保守些,微调 abap/buffersize 增加 10% 约 20MB ,也就是 205000 * 1.1 = 225500,重起 SAP MMC 之后再观察状况。
SAP系统优化技巧

SAP系统优化技巧
在使用SAP系统时,以下是一些优化技巧,可以帮助提高系
统的效率和性能。
1. 数据压缩
将大量的冗余数据从系统中移除可以显着减少系统资源的使用。
您可以使用SAP系统内置的工具来进行数据压缩,以释放磁盘空
间并提升系统性能。
2. 指标优化
通过优化系统中的指标设置,您可以确保SAP系统能够更快
地生成报告和分析结果。
请定期检查并优化系统中的指标设置,以
避免系统慢速运行或报告生成时间过长。
3. 内存管理
合理管理系统中的内存资源可以显著提升SAP系统的性能。
请确保分配足够的内存给SAP系统,并定期监控和调整内存使用
情况,以避免资源不足或浪费。
4. 索引优化
优化系统中的数据库索引可以提高SAP系统的查询和检索速度。
请定期检查并优化数据库索引,并删除不必要的索引以减少数
据库负担和提升查询性能。
5. 事务处理优化
通过优化事务处理过程,您可以减少SAP系统的响应时间并
提高用户体验。
请评估并优化SAP系统中的事务处理流程,以确
保其能够高效执行业务操作。
这些SAP系统优化技巧将帮助您提升系统的效率和性能,提
供更好的用户体验和业务运行环境。
请定期检查和更新系统设置,
并与SAP支持团队保持紧密联系,以确保系统始终处于最佳状态。
以上为SAP系统优化技巧,希望对您有所帮助!。
SAP业务流程性能优化BPPO_Technical_Brief_CN

SAP业务流程性能优化BPPO_Technical_Brief_CN在进行SAP业务流程性能优化时,需要遵循以下步骤:1.识别关键业务流程:首先要明确哪些业务流程对企业的运营至关重要。
这些业务流程可能涉及销售、采购、生产、财务等方面。
2.分析业务流程:对所识别的关键业务流程进行详细的分析,包括流程图绘制、数据流分析等。
这有助于了解整个流程中的瓶颈和优化点。
3.性能评估:通过对业务流程的实际运行进行性能评估,可以确定当前的性能水平以及存在的问题。
可以使用SAP系统内置的性能监控工具或第三方性能测试工具。
4.优化策略制定:根据性能评估的结果,制定针对性的优化策略。
这些策略可以包括硬件升级、系统配置调整、数据管理优化等。
5.实施优化措施:根据制定的优化策略,对SAP系统进行相应的调整和优化。
这可能涉及到编码优化、数据库优化、缓存设置等方面。
6.测试与验证:在实施优化措施后,需要进行全面的测试和验证,确保优化效果符合预期。
这包括对业务流程的整体性能测试以及部分关键功能的单独测试。
7.持续性能监控:性能优化是一个持续的过程,需要定期对SAP系统进行性能监控,及时发现并解决潜在的性能问题。
可以使用SAP系统内置的性能监控工具或第三方性能监控工具。
通过SAP业务流程性能优化,可以实现以下好处:1.提升用户体验:优化业务流程可以减少系统响应时间,提高用户的操作效率和体验。
2.提高生产效率:通过优化业务流程,可以消除瓶颈和繁琐的操作步骤,提高生产效率和质量。
3.降低运营成本:优化业务流程可以减少系统资源的使用,降低硬件成本和维护成本。
4.提升决策支持:通过优化业务流程,可以提供更准确、实时的数据和分析结果,为管理者提供更好的决策支持。
综上所述,SAP业务流程性能优化是提升SAP系统性能的关键手段之一、通过对关键业务流程的分析和优化,可以提高系统的性能和用户体验,进而提高企业的竞争力和运营效率。
SAPABAP程序性能优化

SAPABAP程序性能优化SAPABAP是一种高级商务应用编程语言,用于在SAP系统中开发和定制程序。
在开发ABAP程序时,程序的性能是一个重要的考虑因素。
优化ABAP程序的性能可以提高系统的响应速度和吞吐量,提高用户体验,减少系统负载,延长硬件使用寿命并节省资源。
下面将介绍一些常见的优化技术和最佳实践。
1.使用合适的数据库访问方法:SAPABAP程序通常需要与数据库进行交互。
在数据库访问方面,使用合适的方法可以大大提高性能。
例如,使用SELECT语句并带有合理的WHERE条件可以减少检索的数据量。
使用内部表进行数据操作,而不是使用数据库表,可以避免不必要的数据库访问。
2.避免在循环中执行数据库访问操作:在循环中执行数据库访问是一个常见的性能瓶颈。
如果可能的话,尽量避免在循环中执行数据库访问操作。
可以将数据库操作放在循环外部,并使用适当的数据结构来处理数据,以减少数据库访问的次数。
3.使用合适的索引:索引是一种用于加速数据库查询操作的数据结构。
为数据库表添加适当的索引,可以减少查询操作的时间复杂度,提高查询性能。
在ABAP程序中,可以使用数据库表的维护事务码(SE14)来添加或删除索引。
4.使用合适的缓存技术:缓存是一种将频繁访问的数据存储在存储介质中的技术。
在ABAP程序中,可以使用SAP提供的缓存技术,如共享内存和工作区缓存,来提高数据访问的性能。
使用缓存可以减少数据库访问的次数,从而显著提高程序的性能。
5.避免冗余的计算:在ABAP程序中,可以通过避免重复计算来提高性能。
如果一些计算结果在程序中多次使用,可以将结果存储在一个变量中,并在需要时使用该变量,而不是每次都重新计算。
6.使用合适的数据类型:选择合适的数据类型可以提高程序的性能。
例如,使用整数类型(INTEGER)而不是字符类型(CHAR)来存储整数数据,可以减少内存占用和计算时间。
在ABAP程序中,可以使用合适的数据类型以及相应的类型转换操作,来提高程序的性能。
SAP-ABAP程序性能调优介绍

SAT程序性能跟踪分析
For User/Service
20
SAT程序性能跟踪分析
Evalute 显示分析结果
显示Net%最多的语句,双击显示代码
21
SAT程序性能跟踪分析
Tips & Tricks
特别是SQL和Internal Table
22
ST05 SQL Trace
按SQL语句汇总 Explain
查看扩展内存
查看CurUse和In Mem 查看Heap Memory 查看个人内存占用
双击Extended Memory -> 模式
11
ST04 数据库性能查看
Data Buffer Quality [%] > 99.5% Session Monitor 查看当前数据库session
In Dialog - 最常用
直接跟踪事务、程序和函数
In Parallel Session
直接跟踪某个Session
For User/Service
后台跟踪某个用户或者程序
15
SAT程序性能跟踪分析
测量精确性
高:对特定区域的高精度测量方式,降低测量错误的可能性,但测量时间会变短 低:测量时间及测试范围更大,但测试错误的可能性高
SQL优化
For all entries in
执行顺序 索引
正确的索引和字段顺序 正确的命中字段 大SQL/Hints
多进程处理
SAP用户与服务器交互过程
Pres. Server
SAP Application Server
Database Server
Network
Dispatcher Network
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
For all entriesThe for all entries creates a where clause, where all the entries in the driver table are combined with OR. If the number of entries in the driver table is larger thanrsdb/max_blocking_factor, several similar SQL statements are executed to limit the length of the WHERE clause. The plus∙Large amount of data∙Mixing processing and reading of data∙Fast internal reprocessing of data∙FastThe Minus∙Difficult to program/understand∙Memory could be critical (use FREE or PACKAGE sizeSome steps that might make FOR ALL ENTRIES more efficient:∙Removing duplicates from the driver table∙Sorting the driver table∙If possible, convert the data in the driver table to ranges so a BETWEEN statement is used instead of and OR statement:FOR ALL ENTRIES IN i_tabWHERE mykey >= i_tab-low and mykey <=i_tab-high.Nested selectsThe plus:o Small amount of datao Mixing processing and reading of datao Easy to code - and understandThe minus:o Large amount of datao when mixed processing isn’t neededo Performance killer no. 1Select using JOINSThe pluso Very large amount of datao Similar to Nested selects - when the accesses are planned by the programmer o In some cases the fastesto Not so memory criticalThe minuso Very difficult to program/understando Mixing processing and reading of data not possibleUse the selection criteriaSELECT * FROM SBOOK.CHECK: SBOOK-CARRID = 'LH' AND SBOOK-CONNID = '0400'.ENDSELECT.SELECT * FROM SBOOKWHERE CARRID = 'LH' ANDCONNID = '0400'.ENDSELECT.Use the aggregated functionsC4A = '000'.SELECT * FROM T100WHERE SPRSL = 'D' ANDARBGB = '00'.CHECK: T100-MSGNR > C4A.C4A = T100-MSGNR.ENDSELECT.SELECT MAX( MSGNR FROM T100 INTO C4A WHERE SPRSL = 'D' ANDARBGB = '00'.Select with viewSELECT * FROM DD01LWHERE DOMNAME LIKE 'CHAR%'AND AS4LOCAL = 'A'. SELECT SINGLE * FROM DD01T WHERE DOMNAME = DD01L-DOMNAME AND AS4LOCAL = 'A' AND AS4VERS = DD01L-AS4VERS AND DDLANGUAGE = SY-LANGU. ENDSELECT.SELECT * FROM DD01V WHERE DOMNAME LIKE 'CHAR%' AND DDLANGUAGE = SY-LANGU. ENDSELECT.Select with index supportSELECT * FROM T100WHERE ARBGB = '00'AND MSGNR = '999'. ENDSELECT.SELECT * FROM T002.SELECT * FROM T100WHERE SPRSL = T002-SPRASAND ARBGB = '00'AND MSGNR = '999'.ENDSELECT. ENDSELECT.Select … Into tableREFRESH X006.SELECT * FROM T006 INTO X006.APPEND X006. ENDSELECTSELECT * FROM T006 INTO TABLE X006. Select with selection list SELECT * FROM DD01LWHERE DOMNAME LIKE 'CHAR%'AND AS4LOCAL = 'A'. ENDSELECTSELECT DOMNAME FROM DD01LINTO DD01L-DOMNAMEWHERE DOMNAME LIKE 'CHAR%'AND AS4LOCAL = 'A'.ENDSELECTKey access to multiple linesLOOP AT TAB.CHECK TAB-K = KVAL." ...ENDLOOP.LOOP AT TAB WHERE K = KVAL." ... ENDLOOP.Copying internal tablesREFRESH TAB_DEST.LOOP AT TAB_SRC INTO TAB_DEST. APPEND TAB_DEST. ENDLOOP.TAB_DEST[] = TAB_SRC[].Modifying a set of linesLOOP AT TAB.IF TAB-FLAG IS INITIAL.TAB-FLAG = 'X'.ENDIF.MODIFY TAB.ENDLOOP.TAB-FLAG = 'X'.MODIFY TAB TRANSPORTING FLAG WHERE FLAG IS INITIAL.Deleting a sequence of linesDO 101 TIMES.DELETE TAB_DEST INDEX 450. ENDDO.DELETE TAB_DEST FROM 450 TO 550.Linear search vs. binaryREAD TABLE TAB WITH KEY K = 'X'.READ TABLE TAB WITH KEY K = 'X' BINARY SEARCH. Comparison of internal tablesDESCRIBE TABLE: TAB1 LINES L1,TAB2 LINES L2.IF L1 <> L2.TAB_DIFFERENT = 'X'.ELSE.TAB_DIFFERENT = SPACE.LOOP AT TAB1.READ TABLE TAB2 INDEX SY-TABIX.IF TAB1 <> TAB2.TAB_DIFFERENT = 'X'. EXIT.ENDIF.ENDLOOP.ENDIF.IF TAB_DIFFERENT = SPACE." ...ENDIF.IF TAB1[] = TAB2[]." ...ENDIF.Modify selected components LOOP AT TAB. TAB-DATE = SY-DATUM. MODIFY TAB. ENDLOOP. WA-DATE = SY-DATUM. LOOP AT TAB. MODIFY TAB FROM WA TRANSPORTING DATE. ENDLOOP. Appending two internal tables LOOP AT TAB_SRC. APPEND TAB_SRC TO TAB_DEST. ENDLOOP APPEND LINES OF TAB_SRC TO TAB_DEST. Deleting a set of lines LOOP AT TAB_DEST WHERE K = KVAL. DELETE TAB_DEST. ENDLOOP DELETE TAB_DEST WHERE K = KVAL. Tools available in SAP to pin-point a performance problem The runtime analysis (SE30 SQL Trace (ST05 Tips and Tricks tool The performance databaseOptimizing the load of the database Using table buffering Using buffered tables improves the performance considerably. Note that in some cases a statement can not be used with a buffered table, so when using these statements the buffer will be bypassed. These statements are: o o o o o Select DISTINCT ORDER BY / GROUP BY / HAVING clause Any WHERE clause that contains a sub query or IS NULL expression JOIN s A SELECT... FOR UPDATE If you wan t to explicitly bypass the buffer, use the BYPASS BUFFER addition to the SELECT clause. Use the ABAP SORT Clause Instead of ORDER BY The ORDER BY clause is executed on the database server while the ABAP SORT statement is executed on the application server. The database server will usually be the bottleneck, so sometimes it is better to move the sort from the database server to the application server. If you are not sorting by the primary key ( E.g. using the ORDER BY PRIMARY key statement but are sorting by another key, it could be better to use the ABAP SORT statement to sort the data in an internal table. Note however that for very large result sets it might not be a feasible solution and you would want to let the databaseserver sort it. Avoid the SELECT DISTINCT Statement As with the ORDER BY clause it could be better to avoid using SELECT DISTINCT, if some of the fields are not part of an index. Instead use ABAP SORT + DELETE ADJACENT DUPLICATES on an internal table, to delete duplicate rows.。