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秒左右.

6510432b2004a9e2c92225b47e5d4de4.png

执行追踪

ST12执行程序,记录程序的执行过程

01

执行追踪

在ST12中选择 CURRENT MODE  输入事务代码,点击执行按钮. 正常执行并退出程序后, 可以在右下角找到系统记录的跟踪文件

6dec754df37a9af85a5e4bd6a3fd6224.png

02

查看SQL

查看SQL SUMMARY

对执行最耗时的SQL语句查看执行解释

3e532a55ea00a11a0dd6b5016a2abdad.png

cb3c54c4c6447a36b266f5706f52babe.png

03

图像解释

点击图像解释按钮,系统尝试打开浏览器显示图形. 但是看不到图形信息. 原因不明, 估计是该功能的BUG或者系统的配置问题.

70e7d9d1098b9dd4a2db55838ed71f40.png

04

执行跟踪

点击执行跟踪按钮 系统会执行SQL语句并产生一个跟踪文件 xml.plv 下载到本地目录,同时提示使用HANA STUDIO 打开,以便图形化显示

684aa0ad7189ff615720a21308c26598.png

fb5d33f474c190dd10ef7f3cdb308a5f.png

05

显示跟踪文件

启动HANA STUDIO . 把文件拖入到HANA STUDIO 的界面.

可以看到一个概览界面.

编译时间: 412.37毫秒

执行时间: 373.5 秒

点击执行计划(Executed Plan ) 可以看到详细的图形化显示的执行计划

28f80992541f06dc387e03a28153402c.png

执行计划

34568d4ce9460bbf59f468cf76f4f895.png

95294ae00a60c5b9a56e816a5695b0d9.png

1949044423c99b68caf336e666d04d9a.png

5ce989e746eefe6616ab91579bcf9ee1.png

06

执行计划分析

从执行计划可以看出.

MBEW 在ABAP中是一个重定向表, MBEW 中的LBKUM 值实际来源于视图 V_ML_ACDOC_EX_UL 没有使用 column search ,大量读取该视图的内容后,最终才与实际表ZTUP_ZMR21合并数据,418923000条记录参与合并获取最终结果. 可以猜测,因为LEFT JOIN MBEW 导致了大量的系统资源开销.

59957a7404f416293f00f19ab1078ff4.png

优化尝试一

不改变代码的情况下尝试把地点限制及400多行的商品限制加上, 执行时间大量减少.执行计划也简洁了许多 对于视图V_ML_ACDOC_EX_UL使用了 column search,大量减少了数据的获取.

fef78936c392e8f6a71734cb70f7ce8f.png

7f735d9f51d589b9998415c56597a5fb.png

优化尝试二

尝试调整为INNER JOIN 后,重新跟踪,首先可以看到整体执行效率提高了很多. 

改变LEFT JOIN 为 INNER JOIN 会调整业务逻辑. 但是如果能确保主数据维护的完整性. 这个调整对逻辑影响不大. 

所以是否能调整表的JOIN方式,需要根据具体情况分析, 不能一概而论

改变后执行计划简洁了许多

d30a6bbf608e69cbd1b94c424c522653.png

0ef31a3acd9704c903fddffb415f5387.png

总结

参与左连接的右表的查询计划中似乎没有带入左表的查询结果作为限制条件,导致查询了大量数据参与最终的记录过滤.

如果把商品限制加上后, 明确的查询条件可以加入右表的执行计划中.减少数据的获取.这个方式不便于操作且隐蔽性太强.不易于使用.

调整为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

约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)

dc353bd17a0afa90ed1bddb160ddd866.png

公众号 : syjf1976_abap

          ABAP开发技巧

微信号 : 392077

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

申请进入公众号讨论群提问或者参与话题讨论

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP(Advanced Business Application Programming)是SAP的一种编程语言,用于开发企业级应用程序。在ABAP中,可以直接执行SQL语句来操作数据库ABAP通过使用Open SQL语句来直接执行SQL。Open SQL是一种特殊的ABAP语法,可以在ABAP程序中直接执行SQL语句,而不需要使用特定的数据库语言。 要在ABAP执行SQL语句,首先需要在ABAP程序中定义一个数据库表类型或者内表,用于存储从数据库中检索的数据。然后,可以使用SELECT语句从数据库中检索数据,也可以使用INSERT、UPDATE和DELETE语句来对数据库进行插入、更新和删除操作。 通过在ABAP程序中直接执行SQL,可以方便地访问和处理数据库的数据。由于ABAP内置了对数据库的访问和管理功能,因此执行SQL不需要额外的库或驱动程序。同时,在ABAP中可以使用数据字典来定义和管理数据库表结构,使得执行SQL更加方便和灵活。 需要注意的是,在直接执行SQL时,需要保证代码的安全性和稳定性。为了防止SQL注入和其他安全问题,应该在执行SQL之前对输入数据进行验证和过滤。同时,在执行SQL之后,应该对返回的数据进行正确性和完整性的验证,以确保数据的一致性和正确性。 总而言之,ABAP可以直接执行SQL语句来操作数据库。通过使用Open SQL语句,可以方便地访问和处理数据库的数据,为企业级应用程序的开发提供了便利。同时,需要注意对输入数据和返回数据的验证,以保证代码的安全性和数据的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值