Ansicht
Dokumentation

CL_DMC_SEMAPHORE_HANDLER - Synchronisation von Bearbeitungsvorgängen

CL_DMC_SEMAPHORE_HANDLER - Synchronisation von Bearbeitungsvorgängen

Fill RESBD Structure from EBP Component Structure   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Diese Klasse wurde im Rahmen der Migration Workbench (MWB) entwickelt, um die einzelnen Vorgänge der 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:

  1. INIT_SYSTEMDATA()
  2. INIT_SEMAPHORE()
  3. UPDATE_SEMAPHORE()
  4. FILL_SETTINGS()
  5. DB_SETTINGS()
  6. CHECK_SETTINGS()
  7. COMPARE_SETTINGS()
  8. SHOW_SUBSETTINGS()
  9. VALUES_SERVER()
  10. DELETE_SERVER()

Außerdem enthält diese Klasse Methoden für das Anhalten und Freigeben von Destinationen, nämlich:

  1. STATUS_DEST()
  2. STOP_DEST()
  3. FREE_DEST
  4. SEL_DEST
  5. MARK_DEST

Für die Laststeuerung selbst, also die Synchronisation der Vorgänge Lesen, Konvertieren und Schreiben von Daten, werden die Methoden GET_SEMAPHORE()und FREE_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 konvertierenden Tabellen und im Leistungsvermögen der beteiligten Applikationsrechner gerade bei der Übertragung groß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_SEM systemweite Sperren auf die transparente Datenbanktabelle DMC_CPU_SEM absetzen. Bevor jedoch eine Sperre für einen der Vorgänge Lesen, Konvertieren oder Schreiben gesetzt werden darf, reiht sich jeder anfordernde Vorgang mit seiner global eindeutigen Kennung (guid)in eine Warteliste ein, die ebenfalls systemweit für alle Vorgänge geführt wird. Nur wenn ein Vorgang in dieser Liste die erste Position einnimmt, darf er überhaupt eine Vorgangsperre setzen. In allen anderen 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 Vorgang zur 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ähigkeit und 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 einen Vorgang 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 Semaphore dekrementiert, so dass der frei gewordene Vorgang danach von einem anderen Konvertierungsobjekt besetzt werden kann. Außerdem werden alle Positions- und Vorgangssperren bei gleichzeitigem Neuaufbau der Warteliste auch dann gelöscht, wenn die Wartezeit überschritten wird, die als Parameter RT_SEMAPHORE_MAX_WAITin der Tabelle DMC_RT_PARAMS definiert ist. Fehlt die Wartezeit in der Parametertabelle, dann wird ihr zur Laufzeit automatisch der Wert CO_WAIT_VALUE = 900 Sekunden zugewiesen.

Beispiel

Für das Lesen der zu übertragenden Daten steht ein Applikationsrechner mit 2 Prozessoren zur Verfügung, während die Rechner für Konvertierung und Schreiben jeweils 8 Prozessoren gleicher Taktung aufweisen. Dann müssten die Lastzahlen unter den Annahmen, das je Prozessor 4 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 Daten auf der Ebene von Subprojekten gepflegt, indem der Pfad Verwaltungsdaten -> Destinationen und Systemeinstellungen pflegen nach Aufruf der Transaktion MWB gewählt wird. Hier müssen auch die Destinationen aller beteiligten Applikationsrechner eingetragen 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ächlichen Lastverhä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ändig gelöscht. Damit wird vermieden, dass globale Kennungen, die bei Abbrüchen nicht freigegeben wurden, 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 beim Setzen von Sperren auftreten, muss der Systemparameter enque/table_size vergrößert werden. Beide Parameter können durch Aufruf der 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 Transaktion SE38 -> DMC_SEMAPHORE_STATUS_DISPLAY -> Ausführen (F8) angezeigt werden.






TXBHW - Original Tax Base Amount in Local Currency   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 10350 Date: 20240427 Time: 072312     sap01-206 ( 185 ms )