「ABAP」万字详解,一文带你入门SAT事务码SQL优化必备
Posted ThundersArk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「ABAP」万字详解,一文带你入门SAT事务码SQL优化必备相关的知识,希望对你有一定的参考价值。
💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。
💅文章概要: 在本节内容中,我们将继续学习ABAP OPEN SQL的知识,今天带来的内容是T-CODE:SAT的简介,SAT事务码是ABAP中用于对语句性能监控的一个工具,可以帮助我们更好地针对SQL语句进行性能优化,跟着我的脚步,一起来看看吧!本文是ABAP SQL性能优化系列的开篇,主要学习SAT的使用方法。
🤟每日一言: 永远年轻,永远热泪盈眶!
目录
前言
在本节内容中,我们将继续学习ABAP OPEN SQL的知识,今天带来的内容是T-CODE:SAT的简介,SAT事务码是ABAP中用于对语句性能监控的一个工具,可以帮助我们更好地针对SQL语句进行性能优化,跟着我的脚步,一起来看看吧!本文是ABAP SQL性能优化系列的开篇,主要学习SAT的使用方法。
SAT初始屏幕简介
SAT
是SAP提供的用来替代SE30
的程序性能优化分析工具( runtime analysis
),功能比SE30更加强大,使用起来也很方便。它的初始屏幕如下图所示:
PS:下面将分成以下几个板块来对
SAT主屏幕界面元素
进行详细地讲解:
- 页签介绍 | 应用工具栏
- Short Description
- Settings
- In Dialog
- In Parallel Session
- For User/ Service
- Data Formatting
页签介绍 | 应用工具栏
SAT主屏幕有两个页签,它们分别是:Measr.
和Evaluate
。应用工具栏中有一个应用:Tips & Tricks
。下面分别来进行介绍:
Tips & Tricks
打开Tips & Tricks
,会进入到另外一个屏幕ABAP对象的操作提示和技巧
,在里面可以学习到一些语句性能对比知识,大家可以点进去详细研究研究。
Measr.
Measr.
页签主要用于对SAT运行属性进行配置,包括:SAT变式设置,指定SAT监控入口,指定工作进程(work process),设置后台监控SAT,设置内表命名规则
Evaluate
Evaluate
页签主要用于查看SAT结果文件,双击条目即可进入性能分析屏幕Display Measurement
PS:所有创建的SAT结果文件都可以在这里找到,但是注意每个结果文件都有保存时间,超过保存时间会被删除,最长保存时间截止到
Deleted On
字段所展示的时间
Short Description
PS:Short Description主要用于维护结果文件的
短文本描述
,会显示在这里:
Settings
Settings
主要用于设置SAT变式
,默认为DEFAULT
,可以参照创建一个符合自己需求的变式。
参照创建Variant变式并更改属性
PS:下面讲解如何参照创建一个符合自己需求的变式
(一)双击复制
按钮,参照DEFAULT
复制一个新的变式
(二)弹出Copy Variant
对话框,维护变式文本描述
(三)点击更改
按钮,修改变式属性
(四)进入后,拥有三个页签
,下面分别来进行介绍:
在Duration and Type
页签中,我们可以进行Size Limits
,Aggregation
,Options
的设置,Options用的不多,在这里不做讲解,后面有用到的机会再讲讲。
Size Limits
Maximum Size of File
:文件最大容量Maximum Execution Time
:最大SAT运行时间
Aggregation
None
:选择这个,只会把程序中的调用显示出来,一般用None就够用了。Per Call Position
:选择这个,只会把程序中的调用显示出来,一般用None就够用了。
在Statements
页签中,我们可以选择需要跟踪的ABAP语句,有时候不需要跟踪所有的内容,比如只跟踪SQL。
在Program Parts
页签中,我们可以设置SAT跟踪的范围:
In Dialog
在In Dialog中我们要指定需要监控的程序种类,是TCode(事务码)
,Program(程序)
,还是Function(函数)
。
PS:单击
Execute
按钮便开始执行SAT
In Parallel Session
通过Switch On/off
可以跟踪后台job(background job)
,下面展示一个具体的例子:
(一)打开【T-CODE:SE38】
,进入ABAP编辑器,创建一个程序,复制粘贴以下代码到程序中
DO 50000000 TIMES.
SELECT * FROM sflight INTO TABLE @DATA(gt_sflight).
ENDDO.
(二)在ABAP编辑器:初始屏幕
中,点击菜单栏中的程序—>执行—>后台
(三)进入后,如下图所示,单击立即运行
按钮
(四)程序被挂起在后台运行
(五)在【T-CODE:SAT】
中,单击Switch On/Off
按钮
(六)在这里可以看到所有后台运行的报表
(七)选中我们刚刚创建的在后台运行的报表,单击激活
按钮
(八)SAT程序开始跟踪,打开
字段变为绿灯表示正在跟踪报表程序,并且生成了一个性能文件名
(九)双击性能文件名
,我们可以进入Hit List
PS:在
Hit List
中,我们可以看到完整的程序性能分析,并且能够看到源代码的底层运作逻辑,我们之前的代码是通过不断循环来从数据库表sflight中取出数据放入临时内表gt_sfllight中,这其中ABAP SQL的底层逻辑包括了DB:FETCH(游标)操作
,ABAP SQL Setup操作
等等
(十)若想取消报表程序后台作业,打开【T-CODE:SM50】
,找到我们报表运行的该条目
(十一)菜单栏中选择管理—>删除会话
(十二)弹出对话框。选择是
(十三)该报表程序被取消在后台作业,工作进程状态变为等待
(十四)返回【T-CODE:SAT】
中检查,确认该报表程序已被取消后台运行
For User/ Service
PS:在Schedule中,我们可以对报表程序设定
定时监控
(一)单击Schedule
按钮,进入Overview of Scheduled Measurements (Local Server)
(二)单击Schedule Measurement
按钮,进入对话框
各字段参数含义如下:
User
:用户Cilent
:集团AS实例
:应用服务器实例External Session
:在哪个External Session 中执行的程序被记录数据。1
表示只在1号进程执行的程序被记录数据,而其他的进程的不记录,0
表示所有的都记录Process Type
:程序的类型,Dialog,Update,RFC等。
Object Type
:Transaction, Report, Function等,与下面的对象配合,确定相应的启动方式。Object Name
:tcode, 程序名, 功能函数名。已调度测量的最大数量
:在统计时间有效期内,最多记录的性能跟踪次数Expiration Date
:创建时间(年月日)Run time
:创建日期(小时/分钟/秒数)Description
:短文本描述
Data Formatting
勾选上这个按钮后,所有内表都会被识别;如果不勾选,那么只有IT前缀开头的内表会被识别出来
译文如下:
ABAP 运行时环境不适用于内部表的名称,而是处理IT<no.>
格式的内存对象标识符。
选择此选项后,将确定 ABAP 源代码中显示的内部表的真实名称,并使用内存对象标识符显示在数据评估中。
这使得性能数据的处理更加密集,但评估更易于阅读。
Display Measurement性能分析屏幕简介
在上面我们花费了大量篇幅来对SAT初始屏幕中的界面元素进行了详细的介绍,接下来我们要讲解的是性能分析屏幕
Display Measurement
PS:
Display Measurement
大致样式如下:、
左边是profile
窗口,右边是Hit List
屏幕,下面先对Display Measurement
的Tab页签进行介绍,Tab页签包含了Desktop 1
,Hit List
,DB tables
,Profl.
,Times
。
Desktop 1
Desktop 1为一个桌面工作台,里面集成了Profile窗口
和Hit List屏幕
Hit List
Hit List屏幕展示出了所有的跟踪结果,双击某行能跳转到源代码
处。除此之外还有一排应用工具栏可以对各个字段进行操作(排序
,筛选
等等),在这里我们可以对语句性能进行分析,其中各个字段的解释如下:
各个字段含义:
Hits
:被调用的次数。Gross[microsec]
:该语句,子程序以及被其调用的子程序,语句所消耗的时间。(以微秒记)Net[microsec]
:该语句,子程序不包括被其调用的子程序,语句的消耗时间。(以微秒记)Gross[%]
:显示为 Gross Time 在总时间中占用的时间比。Net [%]
:显示为 Net time 在总的时间中占用的时间比。Statement/Event
:调用事件,与Profile窗口里的事件相对应Program Called
:程序名或事务码名称(通常情况下与Calling Program相同)Calling Program
:程序名或事务码名称(通常情况下与Program Called相同)
DB tables
展现各个SQL的运行时间。
Profl.
PS:Profl.对应Desktop 1中的Profile窗口,它的结构为树形结构,如下图所示:
Profile窗口
能将SAT的跟踪结果多维度
的展现(function,subroutines,rfc,SQl,screen
,当点击对应的节点,对应的Hit List
就展现在屏幕下方。
Times
在Times页签中,我们可以按照不同的条件来展现各个事件的跟踪时间,比如可以对Gross
或者Net
进行降序或升序排序
进行一次ABAP SQL语句性能分析测试
介绍了这么多,相信各位小伙伴们对于SAT事务码
已经了解了很多了吧!下面我们来进行一次Demo尝试,试着用SAT来分析一下我们的ABAP SQL!
PS:让我们一起看看相比
SELECT *
操作来说,只SELECT我们自己要用的字段
速度是否会快一些!
ABAP SQL测试代码
进入【T-CODE:SE38】ABAP编辑器
,复制以下测试代码到程序中,保存并激活!
PS:这里使用了ABAP SQL的新语法!
FORM test_01 .
SELECT * FROM sflight INTO TABLE @DATA(gt_sflight).
LOOP AT gt_sflight INTO DATA(gs_sflight).
WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-fldate.
ENDLOOP.
ENDFORM.
FORM test_02 .
SELECT carrid,connid,fldate FROM sflight INTO TABLE @DATA(gt_sflight).
LOOP AT gt_sflight INTO DATA(gs_sflight).
WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-fldate.
ENDLOOP.
ENDFORM.
START-OF-SELECTION.
PERFORM test_01.
WRITE:sy-uline.
PERFORM test_02.
开始性能分析
(一)弹出对话框。选择是
进入SAT初始屏幕
,在In Dialog
中,选择Program
,输入刚刚我们自己创建的测试程序,单击Execute
执行按钮
(二)进入Display Measurement性能分析屏幕
(三)在Profile窗口中,按照如下图所示路径选择:
(四)Hit List中,选中Calling Program
字段,应用工具栏中单击筛选
按钮(漏斗一样的那个图标
)
(五)在确定过滤值
窗口中输入我们创建的测试程序名,单击右下角执行
按钮(绿色的√
)
(六)操作成功后,便会是如下图所示:
PS:可以看到:
TEST_01
的Gross Time比TEST_02
的Gross Time多了近35%
,证实了SELECT *
操作确实会耗用更多的时间!
写在最后的话
文章到这里就接近尾声啦!如果喜欢博主的话可以给我一键三连支持一下啦!
本文花费大量时间介绍了SAT事务码,非常的详细全面啦
,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,你们的支持是我最大的动力!
✨ 原创不易,还希望各位大佬支持一下 \\textcolorblue原创不易,还希望各位大佬支持一下 原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力! \\textcolor9c81c1点赞,你的认可是我创作的动力! 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向! \\textcolored7976收藏,你的青睐是我努力的方向! 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富! \\textcolor98c091评论,你的意见是我进步的财富! 评论,你的意见是我进步的财富!
使用事务码 SAT 比较传统的 SELECT SQL 语句和 OPEN / FETCH CURSOR 分块读取 ABAP 数据库表两种方式的性能差异
使用事务码 SAT 比较传统的 SELECT SQL 语句和 OPEN / FETCH CURSOR 分块读取 ABAP 数据库表两种方式的性能差异
从 77 开始的连续三篇文章,我们了解 ABAP 程序中变量占用内存空间的话题。通过一位读者朋友向我咨询过的实际问题,介绍了使用 OPEN CURSOR 和 FETCH NEXT CURSOR 这组 ABAP 关键字来实现 ABAP 数据库表分块读取的方法。
- 77. 简单聊聊 ABAP 变量消耗的内存空间这个话题
- 78. 浅谈 ABAP 程序运行时出现『内存耗尽』错误的问题
- 79. 使用 OPEN CURSOR 和 FETCH NEXT CURSOR 对 SAP 数据库表进行分块读写
本教程第 79 个步骤,我们分别用两种不同的方式实现了一个从数据库表 TADIR 中读取指定数目的 ABAP 函数。
第一种方式实现的函数名称:ZSELECT_FILTER,实现思路:
第二种方式实现的函数名称:ZBLOCK_FILTER, 实现思路:
从理论上讲,第二种实现不需要将 TADIR 数据库表里的全部数据读取到 ABAP 应用层,所以函数执行的性能,以及在 ABAP 应用层消耗的内存空间,都要优于方法1.
但这仅仅是我们的理论分析,本文我们就来通过使用一些 SAP 提供的标准工具,来客观比较两种实现的性能和内存消耗方面的差异。
详细操作步骤参考这篇文章。
以上是关于「ABAP」万字详解,一文带你入门SAT事务码SQL优化必备的主要内容,如果未能解决你的问题,请参考以下文章
❤️爆肝万字!一文最全总结之Spring从入门到入土❤️(建议收藏)