Der zentrale Dispatcher übernimmt die Steuerung der Verarbeitung und verteilt die Aufträge der DBQueue an die einzelnen Slots.
Es wird zunächst die Anzahl der aktuell verfügbaren Slots ermittelt, die verwendet werden können. Je mehr Last auf dem Datenbankserver vorhanden ist, desto weniger Slots können aktuell verwendet werden, mindestens werden jedoch 5 Slots verwendet.
Die Anzahl der aktuell verfügbaren Slots ergibt sich aus :
Anzahl aktuell verfügbarer Slots = Anzahl der maximal verfügbaren Slots - Betrag für alle Prozesse der eigenen Datenbank - Betrag für Prozesse auf anderen Datenbanken des Servers
Der zentrale Dispatcher prüft die Betriebsbereitschaft der Slots. Der Status der Slots kann über die Datenbanksicht QBMDBQueueSlot abgefragt werden.
-
Slotstatus 3: Übergabe der Aufträge an die Tabelle QBMDBQueueCurrent.
-
Slotstatus 5: Die Aufträge werden verarbeitet.
Sobald Aufträge in die DBQueue eingetragen werden, verteilt der zentrale Dispatcher die Aufträge in die einzelnen Slots und startet die Verarbeitung der Aufträge. Sofern zulässig, werden die Aufträge parallel auf mehrere Slots verteilt. Dabei wird sichergestellt, dass nicht alle verfügbaren Slots von ein und derselben Auftragsart belegt werden.
Der zentrale Dispatcher ermittelt die Einträge der DBQueue (Tabelle DialogDBQueue) und verschiebt die Aufträge in die Tabelle QBMDBQueueCurrent mit der Zuordnung Auftrag pro Slot.
Beispiel für Einträge in den Tabellen DialogDBQueue und QBMDBQueueCurrent
Name des Auftrags | Objekt |
---|---|
OrgRoot |
A |
OrgRoot |
B |
ADSAccountInADSGroup |
X |
ADSAccountInADSGroup |
Y |
ADSAccountInADSGroup |
Z |
Slotnummer | Name des Auftrags | Objekt |
---|---|---|
001 |
OrgRoot |
A |
001 |
OrgRoot |
B |
002 |
ADSAccountInADSGroup |
X |
002 |
ADSAccountInADSGroup |
Y |
002 |
ADSAccountInADSGroup |
Z |
Der zentrale Dispatcher startet die Verarbeitung der Aufträge. Folgeaufträge, die aus der Verarbeitung resultieren, werden in die Tabelle DialogDBQueue eingestellt.
Wenn die Aufträge eines Slots abgearbeitet sind und keine weiteren Aufträge anstehen, wird die Slotnummer in der Tabelle QBMDBQueueCurrent auf 0 gesetzt. Der Eintrag verbleibt zunächst in der Tabelle QBMDBQueueCurrent, wird jedoch nicht mehr beachtet (da Slot 0 kein aktiver Slot ist). In regelmäßigen Abständen werden alle Einträge mit Slotnummer 0 aus der Tabelle QBMDBQueueCurrent gelöscht.
Sind keine Aufträge in der DBQueue vorhanden, geht der zentrale Dispatcher in den Wartezustand.
Stopp-Verhalten nach Ablauf der maximalen Laufzeit
Nach Ablauf der maximalen Laufzeit werden die Aufträge aktuell verwendeter Slots in der Tabelle QBMDBQueueCurrent noch abgearbeitet. Es werden keine neuen Aufträge aus der Tabelle DialogDBQueue übernommen.
Zurückstellen von DBQueue Prozessor-Aufträgen
Zurückgestellte DBQueue Prozessor-Aufträge werden durch den zentralen Dispatcher reaktiviert. Das Zurückstellen von Aufträgen wird im Systemprotokoll aufgezeichnet.
Slotnummer | Bedeutung |
---|---|
-1 |
Für das Zielsystem des Objektes läuft eine Synchronisation. |
-2 |
Eine Blockierung der Datenbank konnte nicht in der vorgegebenen Zeit zurückgesetzt werden. |
-3 |
Für das zu berechnende Objekt sind noch Einträge in der Jobqueue vorhanden. |
-4 |
Für das zu berechnende Objekt sind noch Aufträge in der DBQueue vorhanden, die eine notwendige Voraussetzung sind. |
-5 |
Eine externe Bedingung ist noch nicht erfüllt. |
-6 |
Das zu berechnende Objekt ist als ausstehend markiert. |
-11 |
Beim Befüllen des Slots war das Objekt noch aus einem früheren Verarbeitungslauf vorhanden. |
-12 | Das Objekt wurde nach der Verarbeitung immer noch im Slot gefunden. |
-23 | Bei der Verarbeitung ist eine Deadlock-Situation aufgetreten. |
-24 |
Bei der Verarbeitung ist ein Ausführungsfehler aufgetreten. |
-25 |
Die Delta-Berechnung lief in einen Überladungszustand. |
-26 |
Interne Fehlerbehandlung. |
-500 |
Interne Fehlerbehandlung. |
Nutzung des DBQueue-Puffers
Um Blockaden bei der Verarbeitung der Aufträge in der DBQueue durch langlaufende Aktionen, wie beispielsweise Synchronisationen, zu verhindern, wird ein DBQueue-Puffer (Tabelle QBMDBQueuePond) genutzt.
Synchronisationen schreiben ihre DBQueue Prozessor-Aufträge zunächst in die Tabelle QBMDBQueuePond. Nach Abschluss der Synchronisation werden die Einträge aus der Tabelle QBMDBQueuePond in die Tabelle DialogDBQueue verschoben.
Sollte eine langlaufende Aktion über einen definierten Zeitraum keine weiteren Einträge im DBQueue-Puffer erzeugen, weil beispielsweise eine Synchronisation nicht korrekt beendet wurde, werden verbliebene Einträge der Tabelle QBMDBQueuePond in die Tabelle DialogDBQueue verschoben. Der Zeitraum ist im Konfigurationsparameter QBM | DBQueue | BufferTimeout festgelegt. Der Standardwert ist 120 Minuten. Die Übernahme der Einträge erfolgt innerhalb der täglichen Wartungsaufträge.