ABAP基础知识 复杂程序的性能优化

前言

当程序相对复杂时, 前期开发可能更注重于功能的实现. 等功能实现后, 发现大量数据执行时程序耗时太长. 需要开启程序的优化过程

本文主要介绍程序分析及优化的过程,方法

程序性能分析

事务代码ST12 ,选择current mode ,输入程序或事务代码, 点击执行按钮,正常执行程序. 可以在comment中输入一些备注. 以便说明本次跟踪的缘由.

f869c6c964574eb0a9e36c33574b6b7f.png

正常执行完程序,退出程序返回到ST12界面, 下方会显示本次执行的日志内容

0fb26997a2edf700beb80e9ba8e94df7.png

点击相关的按钮可以看到程序执行过程的所有跟踪信息

7961f4bb92f39c6d30b99d49f4b46527.png

ABAP trace中可以看到整体执行的ABAP语句耗时及数据库访问耗时. 下面清单中可以看到每个调用模块的耗时及总耗时占比(cross time in %) 净耗时占比( Net time in % )

一般情况下,通过净耗时占比可以快速定位到耗时较大的模块及语句

2abfbe563a9d2061d95ed690403d9a99.png

一个程序的优化

优化前 总用时283秒,大部分开销在表的读取及表的更新上,可以从ABAP 跟踪中看出耗时的SQL语句

2697e13960a0785639f0a4744018ae04.png

c0eaf00eb769a6abd133dc49b00c6cf7.png

01

优化表的读取

关于表的读取优化, 用程序的主动缓存(配置表全表缓存,业务表单记录缓存)取代SELECT SINGLE 语句(即使使用了表的技术设置添加了表或视图的缓存). 因为程序的调用层级比较深, 使用了静态类的全局变量的方法缓存哈希表.

详见链接

无峰,公众号:ABAP 技巧与实战ABAP基础知识 数据读取的缓存

2d277f33f5308a1d6689b0cf0e541be6.png

优化效果

总耗时减少了一半以上,部分select 语句耗时大幅减少

be269fb81bb1d8b94f678f5fc8842e6d.png

4550b97cd4f6525b7415a982b6c734ce.png

02

把特定业务表改成全表缓存

特定表从单记录主动缓存调整为全表主动缓存

有一定的优化效果,调整的表的访问耗时明显减少.

这种方式会增加程序的内存开销,需要综合分析是否启用.

此时发现程序的最大开销在于数据库的更新

225c8fd27086962b68d278f596d0f8e7.png

9a9008e6f65994025eca7e42a39d76f1.png

6883878ce170764cf8de9ea0c60a5d7a.png

03

调整更新模式

分析更新逻辑,调整更新模式,按行更新调整为按单更新(不是所有的程序都能做这种调整, 当前这个程序因为业务逻辑原因, 支持按单更新)

耗时占用减少到原来的1/5左右

另外,数据库更新最好在循环后整体提交(或者达到指定数据量提交,避免每行/每单提交)

729a78229aa0371f995869046887a7f7.png

7180a8ca1a62321ab5dde5b3434fa670.png

总结

通过SAP的程序执行分析工具ST12 可以查看程序执行过程中的每个模块/语句的耗时占比 . (其它事务代码如SAT,处理方式和跟踪结果于ST12类似. )

找出占比最高的模块或语句. 找到合适的方法优化.

本文介绍了两个主要优化思路

  • 程序主动缓存表取代系统缓存或数据库访问

  • 按单更新取代明细更新(逻辑允许的情况下).

其它优化思路可以参考之前的部分文章

链接

无峰,公众号:ABAP 技巧与实战SAP小技巧 双LOOP循环的性能优化

链接

Dylan,公众号:ABAP 技巧与实战SAP-ABAP性能优化之构建嵌套结构的哈希表

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值