内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

腾讯云_学习服务器_速度快

2021-07-09 04:16 出处:欧普曼云计算 人气: 评论(0

简介

当使用复杂的SELECT–JOIN SQL语句从传统数据库检索大量数据时,许多SAP查询和ABAP报告的性能不好,这些SQL语句通常位于10个或更多包含数百万条记录、有时甚至数亿条记录的表上。

如果这些ABAP报告是标准SAP程序或ABAPSAP在诸如SAP SQ01查询之类的应用程序中生成的程序不应由程序员修改。然而,使用它们是令人沮丧的,因为它们会导致较差的性能和超时,从而导致宽泛的选择屏幕标准。

开发人员手中有一些选项可以让它们更快地工作–有时甚至可以更快地工作一个数量级。

本博客讨论了如何提高/优化这些性能的高级方法为SAP客户提供让他们更愉快的程序,即闪电般地工作。

小就是美–10*3000小于1*30000

在执行复杂的SELECT–JOIN SQL语句时,对于广泛的WHERE子句选择条件,它通常效率低下,这使得它从多个数据库表中检索数千条记录。在许多情况下,对WHERE子句选择条件的子集多次执行SELECT–JOIN SQL语句,每次检索较少的记录时,可能会更快地得到结果。结果是相同的,但执行时间可能更短。

此外,当每次为选择屏幕条件的唯一子集多次调用SELECT–JOIN SQL语句时,可以实现并行处理技术以更快地获得结果。执行时间的差异甚至可能是一个数量级,如果不是更多的话。

例如,在20多个数据库表上执行SELECT–JOIN SQL语句检索30000条记录可能需要1000秒才能运行。在选择屏幕条件的10个子集上依次调用SELECT–JOIN SQL语句10次可能需要700秒。在10个并行进程中并行调用它,可能需要100秒或更短的时间—性能提高了一个数量级。

如何在标准ABAP程序中执行

当性能较差的程序是标准ABAP报告或由标准SAP应用程序生成的报告(例如SAP SQ01查询)时,不建议修改或创建它

在ST05事务中检查在检索数据时是否使用了正确的索引可能是个好主意。如果没有合适的索引,您可以考虑创建辅助索引来提高程序性能。

如果没有帮助,其他选项是在用户出口、BAdIs或显式增强选项中添加一些自定义ABAP代码。由于这些标准SAP功能的挂钩是由SAP显式预定义的,因此您可能运气不佳,无法在需要添加ABAP代码以使程序运行更快的程序区域中找到挂钩。

另一种选择是使用ABAP表单开头和结尾处提供的隐式增强点,标准ABAP程序中的功能模块和很少的其他地方。

ABAP报表的典型结构

ABAP报表程序的典型结构由3部分组成:

在程序初始屏幕上获取数据选择参数,从数据库表和视图中选择记录正在从数据库表和视图中检索选择参数的数据显示结果,即从数据库表和视图检索的数据

ABAP报告的上述部分可能非常简单,也可能非常复杂,其中包含多个SELECT–JOIN SQL语句和大量的条件ABAP逻辑。然而,报告的结构保持不变,即获取数据选择参数,从数据库检索数据并显示结果。

如果是交互式报告,人工智能软件下载,用户可以进一步选择从最初检索到的数据中向下钻取并选择特定值的附加数据。

本博客的以下部分展示了如何将隐式增强嵌入标准ABAP程序的典型结构中,以使其运行更快。

从最终用户的角度来看,除了显著的性能改进,什么都不会改变。以前,点击F8–Execute按钮后,有足够的时间吃午饭或喝咖啡休息,现在有了优化版的报告,几乎没有时间做短暂的启动。

用户会用相同的选择屏幕运行相同的程序,结果会像以前一样以标准文本输出或显示ALV Grid.

长时间运行的ABAP程序的伪代码

让我们假设,我们有一个长时间运行的ABAP程序,如下表所示:

DATA\u GET子例程实现了一个复杂的SELECT–JOIN语句,该语句从多个数据库表和包含数百万条记录的视图中检索数千条记录。

DATA\u GET子例程的ABAP伪代码可能如下所示表:

结果显示子例程的ABAP伪代码可能如下表所示:

如何使用隐式增强点使其更快

让我们尝试实现隐式增强点,使我们能够并行多次执行上述程序,每次执行一个子集的选择屏幕标准。一旦所有并行进程都完成了,我们就可以连接结果并将它们显示给最终用户。从最终用户的角度来看,除了程序运行速度明显加快之外,什么都不会改变,我们希望能够运行程序的原始版本和一个增强的版本,并比较结果,以确保我们的实现没有引起任何问题,并且结果完全相同。

我们可以实现两个增强–一个在DATA\u GET子例程的开头,另一个在DATA\u GET子例程的开头结果显示子例程。

数据获取子例程开头增强的ABAP伪代码可能如下:

上述增强将:

检查程序的运行类型。如果不是自定义运行类型,则忽略增强,并执行原始程序。如果是自定义运行类型,它将检查运行模式。两种运行模式是可能的,即,当用户执行它时父模式,当它从ZXYZèu run函数模块中的自定义ABAP代码并行执行时子模式。如果IMPORT语句不返回值,则在enhancement中设置父运行模式。如果是父运行模式,则执行功能模块ZXYZrun,然后执行EXIT语句以结束选择启动事件,物联网公司排名,而不执行SELECT–JOIN SQL语句

ZXYZrun功能模块ABAP伪代码可能如下表所示:

首先检索调用程序选择屏幕参数。然后在DO-ENDDO循环中,直到检索到所有选择屏幕子集为止,ZXYZ_RUN_FOR_SUBSET函数模块在新任务中被称为ASYNC RFC。选择屏幕参数的子集被传递给它。

在ZXYZ_RUN_FOR_subset功能模块内,原始程序与选择屏幕参数的子集一起提交,如以下ABAP伪代码所示:

请注意,运行模式设置为CHILD,以便原始ABAP程序可以相应地处理它。

如果运行模式设置为CHILD,则原始程序中的数据获取增强将不起任何作用。它允许对选择屏幕参数的子集执行SELECT–JOIN SQL语句,如下所示:

请注意,对启动所有并行进程的ZXYZèRUN函数模块的调用将等待它们完成。然后,它返回包含来自所有进程的连接结果的输出表。

此表被导出以在results\u DISPLAY子例程隐式增强点中拾取,EXIT语句阻止执行SELECT–JOIN SQL语句。我们已经有了来自ZXYZèRUN函数模块调用的结果。

现在让我们看看下表所示的resultsèDISPLAY子例程中的增强ABAP伪代码:

对于父运行模式,输出表是从DATAèGET子例程中的隐式增强点导入的,并用ALV Grid factory方法显示call.

对于子运行模式,输出表导出为calling ASYNC RFC call。它进一步传递给异步RFC调用返回的所有输出表的集合,这些输出表被连接起来,大数据概念,完整的输出表通过调用ZXYZ运行函数模块在DATA\u GET enhancement中返回。

分享给小伙伴们:
本文标签: 腾讯学习服务器速度快

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

签名: 验证码: 点击我更换图片

评论列表