我正在运行一个ABAP程序来处理大量数据。 SAP文档提供了我应该使用的信息 远程功能模块添加了STARTING NEW TASK来处理数据。
因此,我的程序首先选择所有数据,将数据分解为包并使用数据包调用功能模块以供进一步处理。
这就是我的伪代码:
Select KEYFIELD from MYSAP_TABLE into table KEY_TABLE package size 500.
append KEY_TABLE to ALL_KEYS_TABLE.
Endselect.
Loop at ALL_KEYS_TABLE assigning <fs_table> .
call function 'Z_MASS_PROCESSING'
starting new TASK 'TEST' destination in group default
exporting
IT_DATA = <fs_table> .
Endloop .
但我很惊讶地发现我使用Dialog Processes而不是Background Process来调用我的功能模块。
所以现在我遇到了一个问题,我的一个Dialog进程因为超时而在60分钟后被杀死。
对我来说,似乎STARTING NEW TASK不是海量数据并行处理的正确解决方案。
会有什么替代方案?
答案 0 :(得分:3)
如前所述,这不是一个简单的主题,只需几行代码即可处理。您必须以深思熟虑的方式采取一般步骤以获得预期的利益:
1)获得可用于并行处理的免费工作流程
2)在要处理的包中切片数据
3)使用可用的工作流程为每个包异步调用启用RFC的功能模块。处理等待免费工作流程,如果包裹&gt;可用的流程
4)异步接收结果
5)等待所有事情都处理完毕并再次将数据合并在一起并确保每个包都得到妥善处理
虽然发布链接是不好的做法,但代码很长,会使这个答案非常混乱,所以请看看以下链接:
其他RFC变体(例如qRFC,tRFC等)可以在here找到简短说明,但遗憾的是无法让您进一步了解它们。
编辑:
Regarding process type of aRFC:
在并行处理中,作业步骤在后台照常启动 处理工作流程。 (...)虽然工作本身在一个 后台进程,它开始运行的并行处理任务 在对话工作流程中。这样的对话工作过程可以位于 任何SAP服务器。
服务器使用GROUP(默认值:parallel_generators)指定,请参阅事务RZ12,并且可以拥有自己的资源,仅用于并行处理。如果您的流程超时,则必须以不同的大小对包进行切片。
答案 1 :(得分:2)
要实现并行处理,您需要做的不仅仅是添加该子句。该信息包含在this help topic中。需要进行大量的设计工作,以确保并行处理的通信和结果合并开销不会否定并行处理首先获得的性能优势,并且即使在某些情况下也能保持数据的参照完整性。并行任务失败。不要低估这项任务的复杂性。
答案 2 :(得分:2)
我认为,SAP中并行处理的最佳方式是Jagger提到的Bank Parallel Processing框架。不幸的是,它在任何资源中都很少被提及而且没有很好地记录。 实际上,我发现的最佳文档在本书中
https://www.sap-press.com/abap-performance-tuning_2092/
是的,这很棘手。它花了我大约5或6天来迫使它去。但结果很好。
所有内容都位于包BANK_PP_JOBCTRL
中,您可以使用其名称进行Google搜索。
主要思想是将所有工作分成几个步骤(简化):
制备
并行处理
2.1。加工准备
2.2。处理 (实际上还有更多的步骤)
第一步不是平行的。在这里,您应准备所有数据以进行并行处理,并将其分成“片段”,并将进行并行处理。
反过来,片段的内容也可以是ID或预加载的数据。
之后,您可以在并行处理中运行第2步。
所有这一切的好处是,一件并行工作中的错误不会导致所有处理的崩溃。
我建议您检查功能组BANK_API_PP_DEMO
答案 3 :(得分:0)
您可以使用bgRFC technique。这是SAP制作的一种新的后台处理方法。
除了已有的IN BACKGROUND TASK之外,BgRFC还可以配置和监控通过此方法运行的所有呼叫。
您可以在不同的可能性here之间阅读更多文档。这一切(当然)取决于您的SAP版本。