Anfang des InhaltsbereichsHintergrunddokumentationFragen und Antworten zum Thema Sperren Dokument im Navigationsbaum lokalisieren

Im folgenden werden häufig gestellte Fragen zum Sperrkonzept mit zugehörigen Antworten aufgelistet, um schnell Information bereitzustellen. Das meiste ist unter Funktionsweise des SAP-Sperrkonzepts genauer beschrieben.

Beispiel Frage

Was passiert mit Sperren, wenn der Enqueue-Server durchgestartet wird?

Hinweis Antwort

Sie gehen verloren, sofern sie nicht ins Backup-File auf Platte gesichert wurden. Auf Platte werden diejenigen Sperren gesichert, die bei COMMIT WORK nach CALL FUNCTION .. IN UPDATE TASK an den Verbucher vererbt werden. Die Sicherung auf Platte erfolgt zu dem Zeitpunkt, zu dem der Verbuchungsauftrag gültig wird, also im o.g. COMMIT WORK. Bei jedem Neustart des Enqueue-Servers werden die auf Platte gesicherten Sperreinträge in die Sperrtabelle zurückgeladen.

Eine Sperre wir genau dann auf Platte gespeichert, wenn das Backupflag gesetzt ist.

Beispiel Frage

Wo liegt die Sperrtabelle?

Hinweis Antwort

Im Hauptspeicher, Shared Memory, des Enqueue-Servers. Zugriff haben alle Workprozesse des Enqueue-Servers. Fremde Applikationsserver lassen ihre Sperroperationen im Enqueue-Prozeß des Enqueue-Servers ausführen. Die Kommunikation erfolgt dann über die betroffenen Dispatcher und den Message-Server.

Beispiel Frage

Kann es nach Startup bereits Sperren geben?

Hinweis Antwort

Ja, die gesicherten Sperren, die an den Verbucher vererbt wurden, werden beim Startup in die Sperrtabelle zurückgeladen (siehe erste Frage).

Beispiel Frage

Wie schnell sind Sperroperationen?

Hinweis Antwort

In Workprozessen des Enqueue-Servers einige 100 Mikrosekunden. In Workprozessen fremder Applikationsserver kommen die Message-Server Kommunikation und 8 Prozeßwechsel hinzu. Abhängig von CPU- und Netzlast zwischen ca. 20 (best case) und ca. 80 (typisch) Millisekunden.

Beispiel Frage

Was zuerst tun bei Problemen aller Art?

Hinweis Antwort

Diagnosefunktionen ausführen:

sm12 Zusätze ® Diagnose und danach

sm12 Zusätze ® Diagnose in VB

Falls irgendwelche Probleme gemeldet werden, die Tracefiles dev_w*, dev_disp, dev_eq* sichern, im Syslog nachsehen.

Beispiel Frage

Bei den Diagnoseeinzelheiten in SM12 bekommt man folgende Meldung:

Lock management operation mode

Internal lock management in same process

Was bedeutet diese Meldung, und was sind andere Optionen?

Hinweis Antwort

"Internal lock management in same work process" in der Diagnosefunktion bedeutet, daß Sie am Enqueue-Server angemeldet sind und Ihr Workprozeß auf die Sperrtabelle sofort zugreifen kann. Sie muß Enqueue-Anforderungen nicht an einen Enqueue-Prozeß auf dem entfernten Enqueue-Server delegieren. Sind Sie an einem Applikationsserver angemeldet, der kein Enqueue-Server ist, teilt Ihnen die Diagnosefunktion den Namen des Enqueue-Servers mit.

In jedem SAP-System gibt es genau einen Applikationsserver, der als Enqueue-Server fungiert. Dieser pflegt die Sperrtabelle, die sich in einem Shared-Memory-Segment befindet. Alle Workprozesse auf dem Enqueue-Server können auf die Sperrtabelle zugreifen. Alle Workprozesse auf anderen Applikationsservern delegieren ihre Enqueue-Anforderungen an einen speziellen Enqueue-Workprozeß auf dem Enqueue-Server.

Hintergrunddokumentation 

Das Verhalten ist selbstkonfiguriert. Im Default-Profil DEFAULT.PFL gibt die Parameterzeile "rdisp/enqname =<application server name>" Auskunft, welcher Applikationsserver als Enqueue-Server zur Verfügung steht. Stellt ein Applikationsserver fest, daß sein Name mit dem Namen des Enqueue-Servers übereinstimmt, legt er die Sperrtabelle an und alle ihre Workprozesse verarbeiten Enqueue-Anforderungen inline. Stellt ein Applikationsserver fest, daß sein Name nicht mit dem Namen des Enqueue-Servers übereinstimmt, sendet er alle Enqueue-Anforderungen an den Enqueue-Server.

Workprozesse vom Typ Enqueue garantieren die sofortige Verarbeitung eingehender Anforderungen. Normalerweise reicht ein Enqueue-Prozeß aus. In sehr großen SAP-Systemen mit sehr vielen Applikationsservern ist ein zweiter Prozeß vorteilhaft. Es ist jedoch nicht sinnvoll, mehr als zwei Enqueue-Prozesse zu konfigurieren. Wenn mit Transaktion SM50 -> [CPU] zu beobachten ist, daß nur der erste Enqueue-Prozeß benutzt wird, lag das Bottleneck nicht an dieser Stelle.

Beispiel Frage

Wieso benötigt man bei einem zentralen System überhaupt einen Enqueue-Workprozeß? Alle Workprozesse haben doch gleichermaßen Zugang auf das Shared Memory und damit auf die Sperrtabelle.

Hinweis Antwort

Bei einem zentralen System wird der Enqueue-Prozeß nicht genutzt, er kostet aber auch nichts. Weil aber fast jeder Kunde früher oder später einen Applikationsserver dazunimmt, sind Fehler vorprogrammiert, wenn der Enqueue-Prozeß fehlt. Deshalb weist auch die Enqueue-Diagnose einen Fehler aus, wenn kein Enqueue-Prozeß konfiguriert ist.

Beispiel Frage

Werden die Sperren in der Sperrtabelle auch auf Datenbankebene gesetzt? Wenn Nein, dann ist es möglich, im SAP-System gesperrte Objekte mit Datenbank-Mitteln zu bearbeiten.

Hinweis Antwort

Sperren werden nicht in der DB gesetzt, die Sperrtabelle liegt im Hauptspeicher des Enqueue-Servers.

Beispiel Frage

Wird eine Sperrtabelle auch aufgebaut, wenn im Instanzenprofil kein Enqueue-Workprozeß auf dem Enqueue-Server gestartet wird?

Hinweis Antwort

Ja, denn die Workprozesse auf dem Enqueue-Server arbeiten direkt auf die Sperrtabelle, ohne Umweg über den Enqueue-Prozeß. Dieser ist nur für Sperranforderungen aus fremden Applikationsservern zuständig.

Beispiel Frage

Was bedeutet der _SCOPE-Parameter? Wie ist das mit den Sperreigentümern?

Hinweis Antwort

Siehe unter Das Eigentümerkonzept.

Beispiel Frage

Wie bekomme ich (programmatisch) heraus, wer gerade die nicht gewährte Sperre hält? D.h. wie kann ich nach einem ENQUEUE im Programm ermitteln, welcher Benutzer diese Sperre gerade hält, um es dem Benutzer mitzuteilen?

Hinweis Antwort

Nach Return des Funktionsbausteins ENQUEUE_... mit steht der Name des Inhabers der Sperre in SY-MSGV1.

Frage

Kann ich in meinem Sperrargument Sonderzeichen, insbesondere das Klammeraffen-Zeichen @, verwenden?

Hinweis Antwort

Das @-Symbol dient bei SAP-Sperren (Enqueues) als Wildcard-Zeichen, d.h. es steht bei der Kollisionsprüfung für jedes andere Zeichen an dieser Position. So sperrt zum Beispiel der Parameterwert 12345@ die Mengen 123450 bis 123459, 12345a bis 12345z, 12345A bis 12345Z sowie alle sonstigen Werte mit einem beliebigen Sonderzeichen auf der 6. Zeichenposition.

Dies ist im Abschnitt Kollisionen von Sperren detailliert beschrieben.

Um das ungewollte Wirksamwerden des Wildcard-Mechanismus bei SAP-Sperren auszuschließen, muss sichergestellt sein, dass Schlüsselwert-Parameter beim Aufruf von Enqueue-Funktionsbausteinen keine Wildcard-Zeichen enthalten.

Falls Schlüsselwerte, mit denen einzelne Entitäten gesperrt werden sollen, dennoch Wildcard-Zeichen enthalten, müssen diese vor dem Enqueue-Aufruf gegen ein Ersatzzeichen ausgetauscht werden.

Beispiel Frage

Mit einem Single-Prozessor-System als Enqueue-Server haben wir X SD Benchmark Benutzer erreicht. Kann durch Einsatz eines Multiprozessor-Systems diese Zahl gesteigert werden (Message Server auf der gleichen Maschine wie Enqueue)? Ist die Skalierung linear zu erwarten ( Anzahl CPUs * X SD user) ? Wieviele Prozessoren sind sinnvoll wenn Message-Server, Dispatcher, ein Dialog und zwei Enqueue Prozesse auf dem System laufen sollen ?

Hinweis Antwort

Es ist zu erwarten, daß durch Einsatz von mehr Prozessoren der Durchsatz des Enqueue-Servers deutlich gesteigert werden kann. Die CPU-Last am Enqueue-Server verteilt sich ziemlich gleichmäßig auf Message-Server, Dispatcher und Enqueue-Workprozesse, so daß anzunehmen ist, daß bis zu 3 Prozessoren gleichzeitig beschäftigt werden können. Dispatcher und Message-Server bilden den Bottleneck beim Enqueue.

Eine lineare Skalierung ist bis 3 Prozessoren zu erwarten, und auch nur dann, wenn Sperranforderungen so häufig eintreffen, daß Message-Server, Dispatcher und Workprozesse gleichzeitig beschäftigt sind. Wegen asynchroner Systemprozesse (z.B. Syncer) kann der Einsatz von mehr Prozessoren den Durchsatz dennoch weiter verbessern.

Beispiel Frage

Im Syslog finden sich öfters Meldungen wie z.B. die folgende: "Enqueue: Bisher aufgelaufene Wartezeit beim Sperren: 2500 Sekunden". Wie sollte vorgegangen werden, um das Problem zu analysieren? Oder ist dieser Eintrag nicht kritisch? (Abbrüche oder Timeouts wurden nicht bemerkt.)

Hinweis Antwort

Die Meldung ist als Information zu verstehen, gibt aber u.U. Hinweise auf gestörten Parallelbetrieb von ABAP-Programmen. Es wird die Wartezeit angegeben, die seit Startup durch die Verwendung der WAIT-Parameters beim Aufruf von Enqueue-Funktionsbausteinen aufgelaufen ist.

Der WAIT-Parameter ermöglicht, daß ein Sperrversuch einige Male wiederholt werden kann, z.B. um im Verbucher nicht abbrechen zu müssen, wenn eine Sperre kurzzeitig von anderen Programmen gesetzt ist. Der Workprozeß bleibt zwischen den Sperrversuchen belegt.

Ende des Inhaltsbereichs