使用PlanViz进行ABAP CDS性能分析
如管理学学者彼得·德鲁克所说:你无法管理你不能衡量的东西( If you can't measure it, you can't manage it)。要对已有程序进行性能优化,首先要对它的运行状况做出量化分析。
将代码下推到ABAP CDS,是SAP推荐的一种优化方式。但正因逻辑从应用服务器向数据库的转移,传统运行时分析工具SAT也有了力所不能及之处。这时,我们需要新的工具来对这一新的开发对象的运行情况进行分析。
本文将介绍Plan Visualizer(以下简称PlanViz)在ABAP CDS性能分析方面的应用。
本文链接:https://www.cnblogs.com/hhelibeb/p/10472856.html
1,示例CDS视图
本文会用到一个系统自带的简单示例视图,DEMO_CDS_JOIN。它的代码如下,
@AbapCatalog.sqlViewName: 'DEMO_CDS_JOIN'
define view demo_cds_scarr_spfli
(id, carrier, flight, departure, destination)
as select from spfli
join scarr on scarr.carrid = spfli.carrid
{ key spfli.carrid,
key scarr.carrname,
key spfli.connid,
spfli.cityfrom,
spfli.cityto }
2,获取跟踪文件
打开ST05的SQL跟踪,然后在任何地方(SQL Console, SE16, SE38)执行对视图DEMO_CDS_JOIN的查询,本文使用的是SE16。
关闭跟踪,显示结果,如下图,
我们会找到对视图DEMO_CDS_JOIN的查询语句的跟踪记录,选中它,点击菜单栏的Edit->Display Exceution Plan->For Recorded Statement
在新页面中点击工具栏中的Execution Trace,将后缀plv的跟踪文件保存在本地,
3,概览
使用HANA Studio或者安装了HANA Tools的Eclipse打开下载好的plv文件,可以看到跟踪的有关信息,其中第一个页面是概览。
概览中的一些信息的涵义如下,
Execution | 除编译时间外的查询执行时间 |
Dominant Operators |
按执行时间排序(前三位)的算子。这可以帮助你快速找到最耗时的操作。 |
No. of Nodes | 涉及到的服务器数量,如果你有多节点的系统的话 |
Number of network transfer |
发生的网络传输数量(在多节点系统中存在,它是影响性能的关键参数) |
Memory Allocated | 执行语句消耗的总内存 |
Number of table used | 执行过程中接触到的表 |
Result Record Count | 输出的总行数 |
可以在不同的标签页中检查这些信息,比如Timeline ,Operator List, Table used , Performance trace , Network等。
进行不同节点间的大的表连接时,需要将数据在节点间传输。因此在多节点中执行这样的查询会花更多时间。
为了更好的理解PlanViz中的信息,最好只是用它来查看一个比较单一的操作。
可以点击Executed Plan按钮进入执行的细节信息中。也可以在细节信息中进一步下钻,以查看更详细的执行步骤。可以在其中看到查询条件等内容。
4,执行计划
PlanViz中的每一个方框代表一个所谓的计划算子(plan operator, POP)。计划算子的名字表示了处理它们的引擎。名字以CE开头的计划算子在计算引擎(calculation engine)中执行,以BW开头的在OLAP引擎中执行,以JE开头的在连接引擎(join engine)中执行。
在PlanViz显示里,数据从底部流向顶部。这就是说,我们的查询结果在视图的顶部,而实际数据是从底部的数据库表查询得到的。中间的计划算子代表所需的变换。
如果有并行处理,图中会显示两个平行的单独方框。当你有一个复杂计划的时候你可以通过这点来观察它是否进行了并行的处理。在我们当前的例子中,没有并行处理。但多数场景下你会看到运行在不同的平行方框中的并行处理。
如果你把鼠标指针悬浮在方框上,会看到一个明细的弹出框,包含这个方框的详细信息。
节点的Exclusive Time代表运行单个操作所花费的时间。Inclusive Time是运行整个操作所花费的时间,包含子算子的时间,但不包含编译时间。这些信息有助于理解操作的性能。
如果你有一个很大的PlanViz,你可以通过选择“Show Critical Path Only”来查看并关注最重要的执行。
Q&A
一些可能遇到的问题
ST05下载跟踪文件时系统提示Using PlanViz is currently not allowed on this system
这是系统设置问题,请参考本文:PlanViz for Analysing S4 HANA CDS View
联系你的系统管理员,按照文中给出的办法处理。
使用Eclispe打开.plv文件,看到的却是文本
如果打开.plv文件后看到的是下面这样的文本,说明你的Eclipse没有安装HANA Tools,请尝试(重新)安装该插件。参考链接:https://tools.hana.ondemand.com/
(本文的大部分内容来自于Analyzing SQL Execution with the Plan Visualizer (PlanViz),本文只是将其中的HANA视图替换为了ABAP CDS视图,并做了少量增删)
参考链接:Analyzing SQL Execution with the Plan Visualizer (PlanViz)
CDS view performance analysis using PlanViz in HANA studio
PlanViz for Analysing S4 HANA CDS View
使用PlanViz进行ABAP CDS性能分析的更多相关文章
- ABAP CDS 替换对象(Replacement Objects)引起的数据错误
最近遇到了一个诡异的问题:从CDS视图中取得的数据,和从透明表中取得的数据,会有不同的值.在这里记录下问题的表现和解决方案,以供参考. 系统版本:S/4HANA OP1610 涉及表:MCHB 本文链 ...
- 教程:基于访问控制的ABAP CDS视图权限
Hi! 对每一个CDS视图,我们都可以通过DCL(Data Control Language)定义访问控制.在这篇文章中,我会介绍ABAP CDS视图中非常重要的一面:权限管理. 本文的阐述基于我正在 ...
- ABAP CDS-介绍(ABAP CDS视图)
前言 文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 在SAP发展到SAP HANA版本之后,SAP内部的技术正在快速地变化,SAP开发业务应用程序的方式已经发生了范式转变(根本 ...
- 如何进行python性能分析?
在分析python代码性能瓶颈,但又不想修改源代码的时候,ipython shell以及第三方库提供了很多扩展工具,可以不用在代码里面加上统计性能的装饰器,也能很方便直观的分析代码性能.下面以我自己实 ...
- SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)
前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...
- SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)
前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能,简短的内容,深入的理解,Always to review the basics. ...
- SQL Server-聚焦LEFT JOIN...IS NULL AND NOT EXISTS性能分析(十七)
前言 本节我们来分析LEFT JOIN和NOT EXISTS,简短的内容,深入的理解,Always to review the basics. LEFT JOIN...IS NULL和NOT EXIS ...
- SQL Server-聚焦EXISTS AND IN性能分析(十六)
前言 前面我们学习了NOT EXISTS和NOT IN的比较,当然少不了EXISTS和IN的比较,所以本节我们来学习EXISTS和IN的比较,简短的内容,深入的理解,Always to review ...
- SQL Server-聚焦NOT EXISTS AND NOT IN性能分析(十五)
前言 上一节我们分析了INNER JOIN和IN,对于不同场景其性能是不一样的,本节我们接着分析NOT EXISTS和NOT IN,简短的内容,深入的理解,Always to review the b ...
随机推荐
- child_process 子进程
创建子进程,使其可以在进程中执行操作,应用系统命令等.nodejs创建子进程有四种方法,分别是spawn,fork,exec,execFile. 区别 : 格式 : spawn和execFile的格式 ...
- 【译】如何高效的使用 Git
原文链接 代码昨天还是运行好好的今天就不行了. 代码被删了. 突然出现了一个奇怪的 bug,但是没人知道怎么回事. 如果你出现过上面的任何一种情况,那本篇文章就是为你准备的. 除了知道 git add ...
- PV UV QPS 并发数
TPS(Transactions Per Second):每秒事务数 QPS(Query Per Second):每秒请求数,QPS其实是衡量吞吐量的一个常用指标,就是说服务器在一秒的时间内处理了多少 ...
- redis 系列19 客户端
一. 概述 Redis服务器是可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复.通过使用I/O多路复用技术实现的文件事 ...
- 撸一撸Spring Cloud Ribbon的原理-负载均衡策略
在前两篇<撸一撸Spring Cloud Ribbon的原理>,<撸一撸Spring Cloud Ribbon的原理-负载均衡器>中,整理了Ribbon如何通过负载均衡拦截器植 ...
- PC逆向之代码还原技术,第三讲汇编中加法的代码还原
目录 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 总结 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 在讲解加 ...
- PC逆向之代码还原技术,第一讲基本数据类型在内存中的表现形式.浮点,指针寻址公式
目录 代码还原技术 一丶简介代码还原 二丶代码还原中的数据类型表现形式 1.整数类型 2.无符号整数 3.有符号整数 4.浮点数数据类型 5.浮点编码 4.Double类型解析. 三丶浮点汇编 1.浮 ...
- .Net Core SDK 命令介绍
前言 本篇主要介绍 asp.net core 中,使用 dotnet tools 运行 dotnet run 之后的系统执行过程. 如果你觉得对你有帮助的话,不妨点个[推荐]. 目录 dotnet r ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(4)- RT105x选型
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的RT105x选型. 大家都知道i.MX RT105x是i.MX RT系列第一款产品,在提这款产品特性的 ...
- [Linux] scp本地服务器和远程服务器拷贝文件
上传本地文件到服务器scp 本地路径 用户名@远程服务器ip:远程路径 下载文件 scp 用户名@远程服务器ip:远程路径 本地路径-r 是上传下载本地目录到远程 远程文件