FavoriteLoading
1

使用SAT进行程序优化实例教程

[隐藏]

项目中有个abap程序需要优化一下,之前都是用SAP提供的另外一个性能跟踪工具SE30,这次用了一下SAT,现在将整个过程分享出来,供大家参考。

1, 创建SAT变式

参考标准的默认SAT变式,创建一个自己的SAT_001,

扩大一下保存跟踪结果文件的大小以及延长SAT的跟踪时间,防止SAT不能完整记录程序的运行过程数据。

2, 运行SAT跟踪程序

选择步骤1创建的变式,在In dialog中输入被跟踪程序的Tcode,勾上Eval. Immediately,然后点击execute按钮。

进入到程序YMOE_MATAVB的选择画面,输入条件,点击运行,

程序运行结束后。点击back按钮,返回到SAT界面,直接进入到SAT的跟踪结果屏幕。

3, 分析结果

首先要找到耗时比较长的form,大体定个位。

在左面profile窗口中,双击perform,然后在右边屏幕中就会显示所有form的耗时情况。对Gross排序后,再通过主程序名字过滤一下,就发现有两个form耗时比较长,

到代码中review一下,发现这俩form中用到了两个函数, CLAF_CLASSIFICATION_OF_OBJECTS和 BAPI_PRODORD_GET_DETAIL。

然后再通过SAT跟踪结果查询一下function的耗时情况,如下,印证了果然是这两个函数耗时比较长,而且 CLAF_CLASSIFICATION_OF_OBJECTS被调用了6万多次(hits值就是调用次数)。

回到程序中,查看这两个function的调用情况,

BAPI_PRODORD_GET_DETAIL是在一个loop中调用的,用来取得生产订单的信息,从技术角度来看也没什么优化的空间。

再看一下CLAF_CLASSIFICATION_OF_OBJECTS的使用情况,

loop中调用了‘frm_get_workstation’

frm_get_workstation中调用函数 CLAF_CLASSIFICATION_OF_OBJECTS取特性,这样分下来,相同的work center都会调用这个特性函数,造成程序运行性能低下。

修改后:将work center的特性数据保存到一个全局内表中,每次相同的work center可以从内表中读取特性数据,如果读不到再调用CLAF_CLASSIFICATION_OF_OBJECTS,降低函数的调用次数。

修改之后再次运行SAT如下:发现CLAF_CLASSIFICATION_OF_OBJECTS的调用次数明显下降只有2.4万次,消耗时间也将到不到8秒(之前是50多秒).

性能优化成功。

以上。