写这篇文章时,我突然想到很多年前,先明拿作他的软盘,在我家电脑上,把一个他做的传染程序要给我展示,结果没有成功,因为我的系统是MS DOS6了,而他做的程序是运行在DOS5环境中的。那时候他就喜欢在重大机房里抓获各种病毒标本来研究。

得到一个标本,是深入学习的开始。现在我们有一个报表程序,运行起来比较慢一点,我们申请了远程支援,SAP原厂的顾问来帮我们诊断和调优。这样我们有了标本,也有老师来亲自指导,这是最好的学习环境了。

看看程序的逻辑:

我们其实不关心具体是什么业务数据,我们只关系程序运行的速度。

这个程序是一个最典型的报表程序,在数据库里面取数,然后用ALV列表控件显示出来。

程序一共定义了5张内表:

GT_OUT,GT_ALV

GT_OUT3,

GT_OUT4,

GT_OUT5.

1、GT_ALV它最后直接提供给ALV列表控件显示。

2、GT_OUT是最外层的字段最多的内表,它的部分关键字段数据是一开始通过SQL一次获取到的。

3、然后程序取了a017表中的数据,放到GT_OUT3内表中。

4、从采购订单的表头和行项目表,取了计划行相关的数据,放到GT_OUT4内表中。

5、取配额表的数据,放到GT_OUT5内表中。

6、开始循环最外层的内表【GT_OUT】,GT_OUT的每一行:

到GT_OUT4中循环抓取对应的数据一行

到GT_OUT5中循环抓取对应的数据一行

到GT_OUT3中循环抓取对应的数据多行,这里还循环这个多行,按这个子循环去添加到最后的GT_ALV中。

我们用ST12跟踪这个程序的结果分析如下:

程序总执行了238秒,在循环GT_OUT3中耗时201秒,GT_OUT4耗时17秒,GT_OUT5耗时15秒,读KONP表用了38秒(这步代码是在循环GT_OUT3中的)。

SAP顾问服务很好,直接给出了修改代码:

任务1: 把原来定义GT_OUT3为标准表,改成定义为排序表。

任务2: 把原来定义GT_OUT4为标准表,改成定义为排序表。

任务3: 把原来定义GT_OUT5为标准表,改成定义为排序表。

任务4: 把原来GT_OUT3里面,每一次读KONP表改成小循环外面一次读取出来。

我们在测试系统中按4个点修改完程序,测试运行。

结果,程序并没有像我们希望的那样,反而运行超时了。

再用ST12跟踪,发现程序主要在任务4的改动上增加了更多的数据操作。暂时,我们放弃了任务4的修正。只修改了任务1~3,我们再来运行一下程序:

报表运行时间只用了34秒就完成,而原来的时间是238秒,优化后的速度提高了7倍。

主要耗时的LOOP   AT   GT_OUT3 从原来的201秒缩短到31秒。

这个程序的优化,我们学到了使用ST12来跟踪分析和排序表。

原来我只会用se30,确实像顾问说的,ST12看到的信息更多。

关于排序表,金圣俊的书中131页也有详细描述,排序表主要用在只读的内表,可以提高数倍的性能。

--------2021.12.09-------

上次还遗留了这个地方没有优化:

这个2层循环中的select single语句,今天看BC490有点感悟,继续优化了一下,程序只跑了5秒就出来了。

这个优化思路是:如果表小,干脆全部一次放入内表,HANA数据库虽然是内存数据库,但是从应用服务器到内存数据库的网络需要时间,如果次数很多,加起来还是很可观的。

还记得我们的SAP HANA性能测试吗?测试的结果,读最快的场景中是我的联想S30工作站,它比正式服务器还快,因为我只有一台机器,把应用和数据库都安装在了一台机器上,结果没有网络通讯的环境,读应用非常的快。

--------2021.12.10-------

和何喜讨论,何喜说还可以把GT_KONP表的数据再缩小,这确实是一个方法。

对ABAP程序调优的学习(一)select 改 read table相关推荐

  1. 对ABAP程序调优的学习(三)并行并发读取

    该篇文章详细介绍用SAP ABAP 并发读取功能解决数据读取慢的问题.也许你也感兴趣该文章的前序文章:整车订单下达接口的最佳实践. 博主有一个场景,在APO模块中读取生产订单和相关的配置.BOM数据, ...

  2. 【Spark深入学习 -14】Spark应用经验与程序调优

    ----本节内容------- 1.遗留问题解答 2.Spark调优初体验 2.1 利用WebUI分析程序瓶颈 2.2 设置合适的资源 2.3 调整任务的并发度 2.4 修改存储格式 3.Spark调 ...

  3. Java启动参数与内存调优一些学习笔记

    转载自  Java启动参数与内存调优一些学习笔记 .参数的含义 -Xms128m JVM初始分配的堆内存 -Xmx512m JVM最大允许分配的堆内存,按需分配 -XX:PermSize=64M JV ...

  4. 深度神经网络之Keras(三)——正则化、超参数调优和学习方向

    深度神经网络之Keras(三)--正则化.超参数调优和学习方向 本文将继续探索Keras框架下的深度神经网络知识,主要介绍了利用Keras构建的深度神经网络正则化及超参数调优问题. 目录 深度神经网络 ...

  5. java性能调优实战学习笔记

    这是极客时间专栏<java性能调优实战>的部分学习笔记,个人感觉这个专栏内容不深,适合初学者,我只看了编程性能调优和数据库性能调优两块,其他的暂时不打算看了,后续有时间再看吧 有任何问题可 ...

  6. oracle11g程序调优纪实

    一个控制台程序,主要业务就是读取某目录的zip压缩包文件,解压后遍历每个xml文件,解析文件内容然后存储到oracle11g(互联网主机)上. 程序第一版: 1)实现方式:使用动软的代码生成器里常用的 ...

  7. 怎么对 Java 程序调优?不看别后悔!

    Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等. 尤其是在"糙快猛"的互联网开发模式大行其道的今天,随着 ...

  8. 怎么对Java程序调优?不看别后悔!

    前言: 作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应用还是分布式系统.尤其是在"糙快猛"的互联网开发模式大行其道的今天,随着 ...

  9. JVM 调优(学习篇)

    概述 公司的江南白衣写了一篇关键业务系统的JVM参数推荐(2016热冬版)的文章,大牛的文章总是需要细细品读.这篇文章介绍大量的JVM调优参数,内容也比较多,本文只是列出我自己能理解的一些参数,暂时理 ...

最新文章

  1. 解读丨从自动驾驶到学习机器学习:科技发展的15大趋势
  2. ES使用org.elasticsearch.client.transport.NoNodeAvailableException: No node available 错误解决方法
  3. find vba 模糊_VBA积木代码方案:实现多重查找、模糊查找、清除值
  4. java split函数报错
  5. 36岁,程序员,为公司工作8年,昨天HR说公司不准备续约
  6. centos7 网卡配置vlan_centos 7 下多网卡绑定+ vlan 网卡配置
  7. 聊一聊晋升带来的思考
  8. python 数据库模块_MySQl 数据库 之 python模块 pymysql 简单介绍
  9. Linux 信息的各种查询(系统发行版本、内核版本、系统位数)
  10. python与office结合可以干什么-震惊!当Python遇到Excel后,将开启你的认知虫洞
  11. 20180330试试水
  12. hadoop 新API与旧API对比
  13. 取模运算和求余运算的区别
  14. 外贸供应链ERP怎么选?全流程综合管理解析
  15. ubuntu开机出现initramfs该如何解决
  16. 计算机控制面板的字体在哪里,电脑的字体怎么设置
  17. ARP中使用driftnet工具捕获图片
  18. androir 遍历所有文件夹,查询视频文件
  19. Tencent Linux操作系统宣布开源
  20. CH55x使用Arduino编程记录(三)Could not get xxx consecutive bytes in internal RAM for area OSEG

热门文章

  1. 去除idea中xml文件的黄色背景
  2. 【CS】软件测试概念Software Testing
  3. BUAA(2021春)大作业—— 文本摘要生成(数组字典树+快排=0.087s)
  4. 我是如何从电脑小白走上编程之路
  5. Word如何调整页边距
  6. 华三模拟器实现DHCP获取地址
  7. Java 安全 后端返回文件流
  8. 赛博杯2020WP web
  9. 浏览器屏蔽百度推广广告
  10. ASCII码与16进制的互相转换(表)