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
 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值