一
前言
首先郑重申明:本文并不是想教唆你怎么把SAP服务器搞死.
虽然你确实可以从本文中学到搞死SAP服务器的技巧,但是如果因为你对公司的抱怨而导致你无意中使用了本文中的方式无意中搞死了贵公司的SAP服务器.
请不要甩锅给本文作者. 罪过在于你无意的报复之心及贵公司无意让你拥有了报复之心.
鉴于本文可能让部分心有芥蒂的程序员有更强的破坏力.文末会给出解决办法.
本文主要介绍怎么通过一个报表程序实现SAP系统的一键暂停(停止响应其它进程)
二
报表需求
开发一个类似下图的财务报表.
三
开发思路
通过配置表让业务顾问配置特定的科目/成本中心/利润中心/事务代码/分配 对应的业务分类, 最后基于业务的配置按业务分类汇总,即可完成报表
配置时, 允许成本中心,事务代码,分配为空, 表示该配置项与这些为空的字段无关
配置示例. 这样配置表就可以分解成很多逻辑去关联数据
四
数据整合
通过视图把配置表与会计凭证整合, 因为配置表特定字段为空表示忽略该条件. 因此考虑使用UNION 把不同条件下配置表关联ACDOCA的内容联合起来. 最终按业务分类汇总即可实现报表输出
如下图所示, 把成本中心(非空,为空) , 分配(非空,为空),事务代码(非空,为空) 组合成8个条件. 这8个条件分别关联acdoca表. 最后把8组数据 union到一起, 用SELECT SUM 查询统计所需的报表内容
图一(8个查询的union)
图二: 其中一个查询,仅用科目关联
图三:另一个查询,用科目和成本中心关联
五
灾难发生
至此,完成了系统的一键暂停功能开发.当然,这个一键暂停功能很脆弱. 仅适用于存在大量数据的生产系统
这个报表变成了生产系统的一键暂停功能. 报表执行时,几乎所有的数据库CPU资源(80%左右)内存资源(80%)左右都被消耗. 系统进入假死状态(系统不再响应其它用户的数据库请求)
六
原因分析
HANA虽然支持union 语句把多个查询联合, 但如果多个查询都是明细级别的查询. HANA需要先占用很多空间去执行这些数据联合的操作. 然后在联合的数据上再汇总数据,最终呈现. 这个过程导致了大量内存及CPU资源的占用.
七
解决方案
所以解决的思路很简单: 先汇总, 再联合.
先把会计凭证按查询所需要的维度汇总.
这个汇总表代替acdoca去参与数据关联和联合的视图.
优化后,报表性能得以极大的提升. 并解决了系统资源占用的问题
八
总结
HANA列引擎不支持对UNION的优化. 所以在HANA视图或CDS视图开发的过程中,尽量避免对明细数据UNION 后再汇总.
调整为先汇总,如果汇总的结果要通过一个视图集中呈现, 在汇总的基础上再union 到一个视图中. 这样可以充分发挥HANA列存储的优势,快速完成表的汇总.
https://blog.csdn.net/nigulasimao/article/details/135021622 这个链接中给出了UNION的一些替代语句方法.
点击蓝字 关注我们
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论