使用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 ...
随机推荐
- css实现超出文本省略号的两个方法
方法一:适用于定宽高; <!DOCTYPE html> <html> <head lang="en"> <meta charset=&qu ...
- react-native学习(RN)--之Window环境下搭建环境配置,以及初始化建立react-native项目,(真机和模拟器运行的相关错误解决办法,android打包报错)
react-native以后会更火的 一.安装java 二.安装Android Studio 三.安装react-native需要的Android studio额外部分 四.安装nodeJS 五.安 ...
- 『高次同余方程 Baby Step Giant Step算法』
高次同余方程 一般来说,高次同余方程分\(a^x \equiv b(mod\ p)\)和\(x^a \equiv b(mod\ p)\)两种,其中后者的难度较大,本片博客仅将介绍第一类方程的解决方法. ...
- SpringBoot+Elasticsearch
1. 前言 1.1. 集成方式 Spring Boot中集成Elasticsearch有4种方式: REST Client Jest Spring Data Spring Data Elastic ...
- 《HelloGitHub》第 12 期
<HelloGitHub>第 12 期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 简介 最开始我只是想把自己在浏览 GitHub 过程中,发现的有意思.高 ...
- Java开发知识之Java数组
Java开发知识之Java数组 一丶数组简介 首先,不管是Java 还是 C++ 还是其它语言.都有数组. (有可能叫法不同) 数组简而言之就是存储一段连续相同数据类型的数据结构 在Java中数组可以 ...
- Perl获取主机名、用户、组、网络信息
获取主机名.用户.组.网络信息相关函数 首先是获取主机名的方式,Perl提供了Sys::Hostname模块,可以查询当前的主机名: use Sys::Hostname; print hostname ...
- webpack4.0各个击破(4)—— Javascript & splitChunk
目录 一. Js模块化开发 二. Js文件的一般打包需求 三. 使用webpack处理js文件 3.1 使用babel转换ES6+语法 3.2 脚本合并 3.3 公共模块识别 3.4 代码分割 3.5 ...
- nginx基础
常见的能够提供web服务的程序有apache.IIS,nginx等,LLS是windows系统中的,nginx和apache是linux系统中的,nginx是一款高性能的http和反向代理的服务器. ...
- 你需要一点点CIL
1.当我们程序集中有大量反射的时候,性能往往会下降很快.我们目的很明确 如何解决反射造成的这些影响,其中之一个正确且高逼格的做法是 使用 CIL指令去实现.如何实现需要我们拥有若干基础知识.知道 CI ...