使用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 ...
随机推荐
- RTMP、HTTP-FLV、HLS,你了解常见的三大直播协议吗
随着直播行业大火,游戏.乐秀.教育.发布会等直播类产品层出不穷,能够满足各方人员的需求.在直播中,总能在其中找到适合自己的产品内容.喜欢玩游戏的可以看游戏直播,想学点工作技能的,也可以观看大牛现场授课 ...
- Vuex的基本概念、项目搭建、入坑点
前言:Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化. Vuex的四大核心 1.state 驱 ...
- 『Candies 差分约束系统』
差分约束系统 我们先来认识一下差分约束系统鸭! 差分约束系统是一种特殊的\(n\)元一次不等式组,它包含了\(n\)个变量\(x_1-x_n\)以及\(m\)个不等式(约束条件).其中每一个不等式形如 ...
- Kibana安全特性之权限控制
1. 前言 在之前的例子中,我们都是直接输入地址访问的,系统也没有提示我们要输入用户名密码.但是,在实际使用过程中不大可能所有人都是超级管理员可以做任何操作,一定是有权限控制的,这里我们借助X-Pa ...
- 用户代码与Spring的交互形式,你有总结过吗?
PS:教科书般的文章太多了,我要追求与众不同,注意是追求.授人以鱼不如授人以渔. 相关文章 如何慢慢地快速成长起来? 你是如何看待Spring容器的,是这样子吗?
- [十一]基础数据类型之Character
Character与Unicode Character 基本数据类型char 的包装类 Character 类型的对象包含一个 char 类型的字段 该类提供了几种方法来确定字符的类别(小写字母 ...
- spring-boot-2.0.3源码篇 - pageHelper分页,绝对有值得你看的地方
前言 开心一刻 说实话,作为一个宅男,每次被淘宝上的雄性店主追着喊亲,亲,亲,这感觉真是恶心透顶,好像被强吻一样.........更烦的是我每次为了省钱,还得用个女号,跟那些店主说:“哥哥包邮嘛么叽. ...
- 【Zabbix】CentOS6.9系统下部署Zabbix-agent
目录 安装Zabbix-agent 1.安装YUM源 2.安装Zabbix agent端 3.配置zabbix_agentd.conf文件 4.启动zabbix agent服务 5.zabbix图形界 ...
- 练习使用 __attribute__ 属性(仿照内核)
上一篇文章分析了内核中各种 initcall 的调用过程,在这个基础上大概掌握了内核中使用的这种方法,于是参考内核及网友的文章自己动手写了下,记录在这个随笔中. 源代码如下: #include < ...
- Springboot 系列(一)Spring Boot 入门篇
注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 由于 J2EE 的开发变得笨重,繁多的配置, ...