Parallelverarbeitung mit asynchronem RFC 
Um die Systembelastung gleichmäßig zu verteilen, können Sie Destinationszusätze verwenden, die Funktionsbausteine in parallelen Aufgaben auf einem beliebigen Anwendungs-Server oder einer vordefinierten Gruppe von Anwendungs-Servern eines SAP-Systems ausführen.
Achtung
Parallelverarbeitung wird mit einer besonderen aRFC-Variante implementiert. Daher ist es wichtig, dass Sie für Ihre eigenen Parallelverarbeitungsanwen-dungen nur diese richtige Variante verwenden:
CALL FUNCTION STARTING NEW TASK DESTINATION IN GROUP.
Wenn Sie eine andere RFC-Variante verwenden, umgehen Sie damit die in der korrekten Anweisung eingebauten Absicherungen und können Ihr System zum Absturz bringen.
Detailliertere Informationen finden Sie unter:
Voraussetzungen für die Parallelverarbeitung
Funktionsbausteine und ABAP-Schlüsselwörter für die Parallelverarbeitung
Ressourcenverwaltung in der Parallelverarbeitung
Bevor Sie die Parallelverarbeitung implementieren, vergewissern Sie sich, dass Ihre Anwendung und Ihr SAP-System folgende Anforderungen erfüllen:
Logisch voneinander unabhängige Arbeitseinheiten:
Die Datenverarbeitungsaufgabe, die parallel ausgeführt werden soll, muss von anderen Instanzen der Aufgabe logisch unabhängig sein. D.h. die Aufgabe kann ausgeführt werden ohne auf andere Sätze derselben Datenmenge Bezug zu nehmen, die auch parallel verarbeitet wird, und die Aufgabe ist unabhängig von den Ergebnissen anderer Aufgaben der Parallelverarbeitung. Parallelverarbeitung ist z.B. nicht geeignet für Daten, die nacheinander verarbeitet werden müssen, oder bei denen die Verarbeitung einer Information von der Verarbeitung einer anderen Information abhängt. Bei der Parallelverarbeitung gibt es keine Garantie, dass Daten in einer bestimmten Reihenfolge verarbeitet werden, oder dass zu einem bestimmten Verarbeitungszeitpunkt ein bestimmtes Ergebnis verfügbar ist.
ABAP-Anforderungen:
Der Funktionsbaustein, den Sie aufrufen, muss als extern aufrufbar markiert sein. Markieren Sie dazu in der Funktionsbausteindefinition (Transaktion SE37) das Feld Remote Function Call unterstützt.
Der gerufene Funktionsbaustein darf keinen Funktionsaufruf mit der Destination “BACK” enthalten.
Das rufende Programm sollte nach einem asynchronen RFC-Aufruf nicht in einen neuen internen Modus wechseln. Verwenden Sie also nach der Anweisung CALL FUNCTION STARTING NEW TASK weder SUBMIT noch CALL TRANSACTION im rufenden Programm.
Mit der Anweisung CALL FUNCTION STARTING NEW TASK DESTINATION IN GROUP können Sie keine externen Programme starten.
Systemressourcen:
Um Aufgaben aus parallelen Jobs verarbeiten zu können, muss ein Server in Ihrem SAP-System mindestens drei Dialogarbeitsprozesse haben. Zudem muss er der Arbeitsbelastung durch das Parallelverarbeitungssystem gewachsen sein: Dispatcher-Warteschlange zu weniger als 10% gefüllt, mindestens einen Dialogarbeitsprozeß frei zur Verarbeitung der Aufgaben aus dem parallelen Job.
Um die Parallelverarbeitung in Ihren Anwendungen zu implementieren, verwenden Sie folgende Funktionsbausteine und ABAP-Schlüsselwörter:
SPBT_INITIALIZE: Optionaler Funktionsbaustein. Stellt die Verfügbarkeit von Ressourcen für die Parallelverarbeitung fest.
Sie können
prüfen, ob die Parallelverarbeitungsgruppe, die Sie angegeben haben, korrekt ist.
herausfinden, wie viele Arbeitsprozesse verfügbar sind, damit Sie die Größe der zu verarbeitenden Datenpakete entsprechend anpassen können.
CALL FUNCTION Remotefunction STARTING NEW TASK Taskname DESTINATION IN GROUP:
Mit dieser ABAP-Anweisung weisen Sie das SAP-System an, den Funktionsbausteinaufruf parallel zu verarbeiten. Stellen Sie diese Anweisung in eine Schleife, in der Sie die zu verarbeitenden Daten in Arbeitspakete aufteilen. Übergeben Sie die zu verarbeitenden Daten in einer internen Tabelle (EXPORT-, TABLE-Argumente). Die Anweisung implementiert die Parallelverarbeitung, indem sie asynchrone RFC-Aufrufe an die Server absetzt, die in der für die Verarbeitung angegebenen RFC-Server-Gruppe verfügbar sind.
Beachten Sie, dass die RFC-Aufrufe mit CALL FUNCTION in Arbeitsprozessen vom Typ DIALOG verarbeitet werden. Damit gilt die DIALOG-Begrenzung zur Verarbeitung eines Dialogschrittes (Standard: 300 Sekunden, System-Profile-Parameter rdisp/max_wprun_time) auch für diese RFC-Aufrufe. Denken Sie an diese Begrenzung, wenn Sie Ihre Datenpakete für die Parallelverarbeitung einteilen.
SPBT_GET_PP_DESTINATION: Optionaler Funktionsbaustein.
Rufen Sie diesen Funktionsbaustein direkt nach der Anweisung CALL FUNCTION auf, um den Namen des Servers zu erhalten, auf dem die Parallelverarbeitung ausgeführt wird.
SPBT_DO_NOT_USE_SERVER: Optionaler Funktionsbaustein.
Rufen Sie diesen Funktionsbaustein auf, um einen bestimmten Server von der weiteren Verarbeitung paralleler Aufgaben auszuschließen. Verwenden Sie diesen Funktionsbaustein in Verbindung mit SPBT_GET_PP_DESTINATION, wenn Sie feststellen, dass ein bestimmter Server für die Parallelverarbeitung nicht verfügbar ist (z.B. nach einer COMMUNICATION FAILURE-Ausnahme, wenn ein Server nicht mehr verfügbar ist).
WAIT: ABAP-Schlüsselwort
WAIT UNTIL <logischer Ausdruck>
Dieses Schlüsselwort müssen Sie verwenden, wenn Sie auf die Rückmeldung aller mit CALL FUNCTION erzeugten asynchronen parallelen Aufgaben warten wollen. Dies ist z.B. für eine geordnete Hintergrundverarbeitung erforderlich. Sie dürfen das Schlüsselwort jedoch nur dann verwenden, wenn die CALL FUNCTION-Anweisung den Zusatz PERFORMING ON RETURN enthält.
RECEIVE: ABAP-Schlüsselwort
RECEIVE RESULTS FROM FUNCTION Remotefunction
Dieses Schlüsselwort müssen Sie verwenden, wenn Sie die Ergebnisse der Verarbeitung eines asynchronen RFCs erhalten wollen. RECEIVE liefert sowohl IMPORT- und TABLE-Parameter als auch Nachrichten und Rückgabewerte.
Um asynchrone Funktionsbausteinaufrufe im SAP-System parallel auszuführen, verwenden Sie folgende Destinationszusätze:
In einer vordefinierten Gruppe von Anwendungs-Servern:
CALL FUNCTION Remotefunction STARTING NEW TASK Taskname
DESTINATION IN GROUP Groupname
In allen gegenwärtig verfügbaren Anwendungs-Servern:
CALL FUNCTION Remotefunction STARTING NEW TASK Taskname
DESTINATION IN GROUP DEFAULT
Der Zusatz stellt zunächst die gegenwärtig verfügbaren Ressourcen fest (Anzahl der Arbeitsprozesse in allen Servern oder in einer Gruppe von Anwendungs-Servern, vergleichbar mit Login-Servern). Die auf den einzelnen Anwendungs-Servern verfügbaren Ressourcen zur Verarbeitung asynchroner Aufrufe hängen von der aktuellen Systembelastung ab.
Der Anwendungsentwickler ist für die Verfügbarkeit von RFC-Gruppen im Produktionssystem (d.h. im Kundensystem) verantwortlich. Detaillierte Informationen zur Pflege von RFC-Gruppen finden Sie unter Gruppendestinationen pflegen zur Verteilung der Systembelastung.
Nachdem die verfügbaren Ressourcen festgestellt wurden, wird der asynchrone Aufruf auf einem verfügbaren Anwendungs-Server ausgeführt. Wenn zu einem bestimmten Zeitpunkt keine Ressourcen verfügbar sind, führt das System die Ausnahmeroutine RESOURCE_FAILURE aus (siehe Zusatz Exceptions). Bei einem asynchronen Funktionsbausteinaufruf muss diese Ausnahme vom Anwendungsprogramm verarbeitet werden.
Die Ermittlung verfügbarer Ressourcen in einer RFC-Gruppe erfolgt so:
Zunächst ermittelt das System die Länge der Dispatcher-Warteschlange für den entsprechenden Anwendungs-Server. Überschreitet sie 10% der Gesamtlänge, verfügt der Server über keine Ressourcen für die Parallelverarbeitung. Ist sie kürzer, ermittelt das System die aktuelle Anzahl freier Dialogprozesse minus 2 (als Reserve-Instanz für andere Zwecke wie z.B. den Zugriff auf System- oder Verwaltungsprogramme). Daher muss ein Anwendungs-Server mindestens drei Dialogprozesse haben, um für die RFC-Parallelverarbeitung in Frage zu kommen.
Hinweis
Gegenwärtig wird für die parallele Verarbeitung asynchroner Aufrufe nur eine RFC-Gruppe pro Programmumfeld unterstützt. Sie dürfen daher nicht beide Zusätze (DESTINATION IN GROUP Groupname und DESTINATION IN GROUP DEFAULT) in einem Programm verwenden.
Die Ausnahmeroutine RESOURCE_FAILUREwird nur in Verbindung mit asynchronen RFCs mit den Zusätzen DESTINATION IN GROUP Groupname und DESTINATION IN GROUP DEFAULT ausgelöst.
Aus Performance-Gründen empfehlen wir, für die parallele Verarbeitung asynchroner Aufrufe nur eine RFC-Gruppe mit genügend Ressourcen zu verwenden.