CL_DMC_SEMAPHORE_HANDLER - Synchronisation von Bearbeitungsvorgängen
ABAP Short Reference BAL_S_LOG - Application Log: Log header dataDiese Dokumentation steht unter dem Copyright der SAP AG.
Funktionalität
Diese Klasse wurde im Rahmen der Migration Workbench(MWB) entwickelt, um die einzelnen Vorgängeder Datenübertragung wie Lesen, Konvertieren und Schreiben von Daten zeitlich aufeinander abzustimmen.Sie enthält auf der einen Seite Methoden zur Pflege der RFC-Destinationen samt Lastzahlen und Systemeinstellungen für alle an der Datenübertragung beteiligten Applikationsrechner, nämlich:
- INIT_SYSTEMDATA()
- INIT_SEMAPHORE()
- UPDATE_SEMAPHORE()
- FILL_SETTINGS()
- DB_SETTINGS()
- CHECK_SETTINGS()
- COMPARE_SETTINGS()
- SHOW_SUBSETTINGS()
- VALUES_SERVER()
- DELETE_SERVER()
Außerdem enthält diese Klasse Methoden für das Anhalten und Freigeben von Destinationen, nämlich:
- STATUS_DEST()
- STOP_DEST()
- FREE_DEST
- SEL_DEST
- MARK_DEST
Für die Laststeuerung selbst, also die Synchronisation der Vorgänge Lesen, Konvertierenund Schreiben von Daten, werden die Methoden GET_SEMAPHORE()undFREE_SEMAPHORE()eingesetzt, die genau dann aufgerufen werden, wenn einer der folgenden Vorgänge gestartet oder beendet wird:
- Lesen der Daten im Quellsystem (OLI)
- Konvertieren der Daten im MWB-System (IL)
- Schreiben der Daten im Zielsystem (OLO)
Eine Laststeuerung ist erforderlich, weil Unterschiede in den strukturellen Eigenschaften der zu konvertierendenTabellen und im Leistungsvermögen der beteiligten Applikationsrechner gerade bei der Übertragunggroßer Datenmengen zum Teil erhebliche Abweichungen in den Bearbeitungszeiten der einzelnen Vorgänge verursachen, was bei einer Nichtabstimmung zur Blockierung von Applikationsrechnern führen kann.
Für die Synchronisation der einzelnen Vorgänge werden Semaphoren in Form von Sperren verwendet,die über das Sperrobjekt E_DMC_CPU_SEMsystemweite Sperren auf die transparente Datenbanktabelle DMC_CPU_SEM absetzen. Bevor jedoch eine Sperre für einen der Vorgänge Lesen, Konvertierenoder Schreiben gesetzt werden darf, reiht sich jeder anfordernde Vorgang mit seiner global eindeutigenKennung (guid)in eine Warteliste ein,die ebenfalls systemweit für alle Vorgänge geführt wird. Nur wenn ein Vorgang indieser Liste die erste Position einnimmt, darf er überhaupt eine Vorgangsperre setzen. In allenanderen Fällen wird der Vorgang 1 Sekunde angehalten, um danach erneut seine Position in der Warteliste zu bestimmen.
Nach dem Erzeugen einer Vorgangssperre wird die zugehörige Semaphore inkrementiert und der Vorgangzur Bearbeitung freigegeben. Die Anzahl der Vorgänge, die gleichzeitig bearbeitet werden können,wird für jeden Vorgang durch eine Lastzahl festgesetzt. Die Lastzahlen sollen die Leistungsfähigkeitund den Datendurchsatz der beteiligten Applikationrechner für das Lesen der Daten im Quellsystem,das Konvertieren der Daten im MWB-System und das Schreiben der Daten im Zielsystem abbilden. Sobald die eingestellte Lastzahl für einenVorgang erreicht wird, verzweigen alle weiteren Konvertierungsobjekte, die denselben Vorgang anfordern, in eine Warteschleife.
Ist der Vorgang abgeschlossen, werden die Positions- und Vorgangssperren aufgehoben und die Semaphoredekrementiert, so dass der frei gewordene Vorgang danach von einem anderen Konvertierungsobjekt besetztwerden kann. Außerdem werden alle Positions- und Vorgangssperren bei gleichzeitigem Neuaufbauder Warteliste auch dann gelöscht, wenn die Wartezeit überschritten wird, die als ParameterRT_SEMAPHORE_MAX_WAITin der Tabelle DMC_RT_PARAMS definiert ist. Fehlt die Wartezeit in der Parametertabelle, dann wird ihr zur Laufzeitautomatisch der Wert CO_WAIT_VALUE = 900 Sekunden zugewiesen.
Beispiel
Für das Lesen der zu übertragenden Daten steht ein Applikationsrechner mit 2 Prozessorenzur Verfügung, während die Rechner für Konvertierung und Schreiben jeweils 8 Prozessorengleicher Taktung aufweisen. Dann müssten die Lastzahlen unter den Annahmen, das je Prozessor4 Workprozesse definiert wurden und der Schreibvorgang doppelt so lange wie der Lesevorgang dauert, folgendermaßen eingestellt werden:
- Lastzahl Lesen = 8
- Lastzahl Konvertieren = 32
- Lastzahl Schreiben = 16
Hinweise
Die Lastzahlen der einzelnen Vorgänge werden für die Massenübertragung von Datenauf der Ebene von Subprojekten gepflegt, indem der Pfad Verwaltungsdaten-> Destinationenund Systemeinstellungen pflegen nach Aufruf der Transaktion MWB gewählt wird. Hier müssen auch die Destinationen aller beteiligten Applikationsrechnereingetragen werden, ohne deren Angabe die Lastzahl nicht abgespeichert wird. Fehlt die Angabe der Lastzahl bei einer Sperranforderung, dann wird dieser zur Laufzeit automatisch der Wert SEM_VALUE = 255 zugewiesen.
Während der Ausführung des Datentransportes kann die zeitliche Abstimmung den tatsächlichenLastverhältnissen der beteiligten Applikationsrechner durch Aufruf der Transaktion MWB angepasst werden, indem die Lastzahlen der einzelnen Vorgänge je nach Auslastung vergrößert oder verkleinert werden.
Vor dem ersten Anfordern einer Semaphore werden alle Sperren im Klassen-Konstruktor vollständiggelöscht. Damit wird vermieden, dass globale Kennungen, die bei Abbrüchen nicht freigegebenwurden, den weiteren Ablauf blockieren. Die Sperrtabelle kann mittels Transaktion SM12 angezeigt werden, wobei dort Positionssperren immer mit dem Kürzel LOCK und Vorgangssperren mit den Kürzeln READ, CONV oder WRITbeginnen .
Um Programmabbrüche zu vermeiden, muss der Systemparameter abap/timeout den auftretenden Wartezeiten angepasst werden. Falls Systemabbrüche beimSetzen von Sperren auftreten, muss der Systemparameter enque/table_size vergrößert werden. Beide Parameter können durch Aufrufder Transaktion RZ11 eingestellt werden.Alle Abbrüche und Fehlermeldungen werden fortlaufend protokolliert und können durch Aufruf der Transaktion SLG1 angezeigt werden.
Eine Übersicht aller aktuell vorhandenen Sperren und Prozessnummern kann durch Aufruf der TransaktionSE38 -> DMC_SEMAPHORE_STATUS_DISPLAY-> Ausführen(F8) angezeigt werden.
CL_GUI_FRONTEND_SERVICES - Frontend Services RFUMSV00 - Advance Return for Tax on Sales/Purchases
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 10004 Date: 20120527 Time: 112334 triton ( 293 ms )






