ABAP基础知识 SQL执行跟踪分析
点击蓝字 关注我们
一
前言
今天在执行一个程序时,意外的发现只有400多行的记录,SQL语句读取了400多秒才获取数据. 所以尝试追踪了一下SQL语句的执行情况.
本文主要介绍跟踪并查看SQL执行计划的方式
本文的系统环境是S4 HANA . 如果是非HANA的ECC系统, 执行计划显示部分不适用.
二
追踪工具
以下事务代码可以触发系统追踪SQL执行情况
-
ST05 性能跟踪
-
ST12 Single transaction analysis
-
SAT ABAP Trace
实际应用中, 如果可以通过执行程序或事务代码重现该过程, 则推荐使用ST12追踪.
三
原始SQL语句
在指定的表ZTUP_ZMR21中关联MBEW读取移动平均价,及库存.
考虑可能的主数据缺失, 使用了LEFT JOIN 关联 V_MARC_MD 与 MBEW
执行时,只限制了ZTUP_ZMR21的UPLID 号 .指定UPLID号在表中查询到466条记录. 但是整个SQL语句执行效率很差. 耗时400秒左右.
四
执行追踪
ST12执行程序,记录程序的执行过程
01
执行追踪
在ST12中选择 CURRENT MODE 输入事务代码,点击执行按钮. 正常执行并退出程序后, 可以在右下角找到系统记录的跟踪文件
02
查看SQL
查看SQL SUMMARY
对执行最耗时的SQL语句查看执行解释
03
图像解释
点击图像解释按钮,系统尝试打开浏览器显示图形. 但是看不到图形信息. 原因不明, 估计是该功能的BUG或者系统的配置问题.
04
执行跟踪
点击执行跟踪按钮 系统会执行SQL语句并产生一个跟踪文件 xml.plv 下载到本地目录,同时提示使用HANA STUDIO 打开,以便图形化显示
05
显示跟踪文件
启动HANA STUDIO . 把文件拖入到HANA STUDIO 的界面.
可以看到一个概览界面.
编译时间: 412.37毫秒
执行时间: 373.5 秒
点击执行计划(Executed Plan ) 可以看到详细的图形化显示的执行计划
执行计划
06
执行计划分析
从执行计划可以看出.
MBEW 在ABAP中是一个重定向表, MBEW 中的LBKUM 值实际来源于视图 V_ML_ACDOC_EX_UL 没有使用 column search ,大量读取该视图的内容后,最终才与实际表ZTUP_ZMR21合并数据,418923000条记录参与合并获取最终结果. 可以猜测,因为LEFT JOIN MBEW 导致了大量的系统资源开销.
五
优化尝试一
不改变代码的情况下尝试把地点限制及400多行的商品限制加上, 执行时间大量减少.执行计划也简洁了许多 对于视图V_ML_ACDOC_EX_UL使用了 column search,大量减少了数据的获取.
六
优化尝试二
尝试调整为INNER JOIN 后,重新跟踪,首先可以看到整体执行效率提高了很多.
改变LEFT JOIN 为 INNER JOIN 会调整业务逻辑. 但是如果能确保主数据维护的完整性. 这个调整对逻辑影响不大.
所以是否能该表JOIN方式,需要根据具体情况分析, 不能一概而论
改变后执行计划简洁了许多
七
总结
参与左连接的右表的查询计划中似乎没有带入左表的查询结果作为限制条件,导致查询了大量数据参与最终的记录过滤.
如果把商品限制加上后, 明确的查询条件可以加入右表的执行计划中.减少数据的获取.这个方式不便于操作且隐蔽性太强.不易于使用.
调整为INNER JOIN后,关联条件也会进入右表的执行计划中
另外,如果不需要库存字段MBEW-LBKUM . 可以使用V_MBEW_MD 取代MBEW . 这样系统就不会访问会计凭证视图 V_ML_ACDOC_EX. 查询性能也会大幅提升.
同理在不需要访问库存的情况下
-
使用 V_MARC_MD 替代MARC
-
使用 V_MARD_MD 替代MARD
-
使用 V_MCHB_MD 替代 MCHB
-
......
都能提升查询效率
SAP Note 2206980 中也给出了这类优化建议
Your issue itself is caused by SE16 access to table MARC, this should be avoided if possible from business.
Please ask your application colleague to review SAP Note 2206980.They can use the view V_MARC_MD if want to access the master data from MARC only or use the view NSDM_V_MARC_DIFF to access the actual stock quantity
THE
END