使用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 ...
随机推荐
- 懵逼的this指向
请看以下代码: 以上的console.log打印出来的,如果你能完全知道,请忽略,如果你不知道,那就接下来看吧. console.log打印的结果: Google非常智能地把对象给打印出来了,看结果, ...
- solr之环境配置三
配置安装Solr到Tomcat 1. 解压 solr4.7.2.zip 2. 将 solr-4.7.2\dist\solr-4.7.2.war拷贝到 apache-tomcat-7.0.55\weba ...
- Linux~连接windows的ftp,unzip出现的问题
在linux进行连接windows下的ftp服务器 ftp://192.168.2.71 输入用户名和密码登陆成功
- leetcode — path-sum
/** * Source : https://oj.leetcode.com/problems/path-sum/ * * * Given a binary tree and a sum, deter ...
- 补习系列(2)-springboot mime类型处理
目标 了解http常见的mime类型定义: 如何使用springboot 处理json请求及响应: 如何使用springboot 处理 xml请求及响应: http参数的获取及文件上传下载: 如何获得 ...
- Android Nine-patch(.9.png)小结
最近在项目开发过程中,因为界面布局美化的需要开始接触到.9.png,无论是Goolge官方文档还是网上其他资料, 都给出了很多关于.9.png的基本介绍,.9.png基础文章推荐以下几篇: Googl ...
- Docker系列08—搭建使用私有docker registry
本文收录在容器技术学习系列文章总目录 1.了解Docker Registry 1.1 介绍 registry 用于保存docker 镜像,包括镜像的层次结构和元数据. 启动容器时,docker dae ...
- [二十]JavaIO之StringReader 与 StringWriter
功能简介 还记得前面说过的CharArrayReader 和 CharArrayWriter吗? CharArray 是数据源 CharArrayReader 是读, 从一个CharArray 中读 ...
- Gartner 2018 数据库系列报告发布 巨杉数据库连续两年入选
近期,Gartner陆续发布了2018年的数据库系列报告,包括<数据库魔力象限><数据库核心能力>以及<数据库推荐报告>.其中,SequoiaDB巨杉数据库作为业界 ...
- eclipse中的出现在打包一次后,后面新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承ActionBarActivity解决方法一样
第一次写博客,有什么问题或者想法的希望各位可以进行评论交流,望大家多多包涵! 遇到的问题是在新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承Actio ...