Optimierung der Ausdruckswarteschlange

Möglicherweise muss die Ausdrucksengine auf der Basis der Serverressourcen, der Anzahl Ausdrücke und der Komplexität für jede Installation optimiert werden. Im Allgemeinen umfasst der Prozess die wiederholte Optimierung und Messung der Leistung für jeweils einen einzelnen Parameter, bis die Leistung nicht weiter verbessert werden kann. Die Datensätze müssen protokolliert werden. Wenn sich die Hardware, die Verwendung oder die Konfiguration ändert, ist eine neue Optimierung erforderlich.
Ein Administrator muss die folgende Anwendung für jede Installation überprüfen:
Tabelle 1. Anwendungseinstellungen für die Optimierung der Ausdruckswarteschlange
Einstellung Einheit Standardwert Laufzeit* Beschreibung Tipp zur Optimierung
formula.queue.maxage h 24 Ja Die maximale Anzahl Stunden, die das Ausdruckswarteschlangenprotokoll aufbewahrt wird. Es werden nur die ausgeführten Ausdrücke bereinigt. Dies erfolgt mithilfe einer Formel (formula). Ausgeführte Einträge werden zum Zweck der Ausdrucksstatistik (Erweitert > Ausdruckswarteschlange) und der Prüfung auf Auswertungsschleifen aufbewahrt. Bei der Auswertung der Schleifen kann dieser Wert in Konfigurationen mit hohem Durchsatz reduziert werden, um die Tabellengröße klein zu halten.
formula.queue.maxsize Einträge 500000 Ja Die maximale Anzahl Einträge in der Ausdruckswarteschlange. Die Bereinigungstask ist dafür verantwortlich, die Anzahl Einträge unter diesem Wert zu halten, indem das Protokoll bereinigt wird. Es werden nur die ausgeführten Ausdrücke bereinigt. Diese Einstellung überschreibt die maxage-Einstellung. Um die Leistung zu verbessern, kann dieser Wert optimiert werden, um die Größe des Warteschlangenprotokolls während Zeiten mit hoher Auslastung klein zu halten und ansonsten das Anwachsen des Protokolls zu verhindern. Als guter Näherungswert sollte dieser Wert geringfügig unter dem durchschnittlichen Durchsatz während des maxage-Zeitraums liegen.
formula.execution.batch.size Einträge 30 Ja Die Anzahl Ausdruckswarteschlangeneinträge, die während jedes Zuordnungslaufs für einen einzigen Thread zugeordnet werden. Die Einträge werden als "started" (gestartet) markiert und der Thread wird ausgeführt und abgeschlossen, bevor ein neuer Stapel zugeordnet wird. Ausdrücke werden gleichzeitig in mehreren Threads in mehreren Knoten ausgeführt, aber immer in chronologischer Reihenfolge in Bezug auf die Beachtung von Abhängigkeiten. Wenn zwei Ausdrücke in der Warteschlange nicht zusammengehören, müssen sie nicht in der Reihenfolge ausgeführt werden, in der sie hinzugefügt wurden. Ausdruckseinträge können vom Wert eines anderen Eintrags abhängig sein. Der Ausdruckseintrag wird möglicherweise nicht ausgeführt, wenn die Instanz dieses Eintrags (der Wert, von dem der Ausdruckseintrag abhängig ist) nicht vor dem Ausdruck ausgeführt wird. Aufgrund dieser Tatsache und der Nebenläufigkeit ist eine Zuordnung erforderlich, um Kollisionen, eine inkonsistente Reihenfolge und redundante Verarbeitung zu verhindern. Da die Zuordnung kostenintensiv ist, werden mehrere Ausdrücke unter der oben genannten Voraussetzung und der Bedingung, dass sie in der angegebenen Reihenfolge ausgeführt werden, gleichzeitig zugeordnet. Werden viele Ausdrücke zugeordnet, wird der Zuordnungsaufwand gering gehalten, die Nebenläufigkeit jedoch "behindert" und umgekehrt. Als allgemeine Regel gilt, dass dieser Wert niedrig gehalten werden sollte, wenn die Ausdrücke lange Abhängigkeitsketten bilden, und erhöht werden sollte, wenn die Abhängigkeitsketten kurz sind oder nur wenige Abhängigkeiten bestehen. Sie können diesen Wert zur Laufzeit ändern; daher sollten er optimiert werden, bis ein angemessener optimaler Wert gefunden wird. Werte kleiner als 10 oder größer als 200 sind selten optimal.
formula.cleanup.interval ms 1800000 Nein Die Häufigkeit, mit der die Ausdruckswarteschlange bereinigt wird. Hierbei werden die maxage- und maxsize-Einstellungen umgesetzt. Es wird nur die Warteschlangenbereinigung ausgeführt. Die erste Bereinigung erfolgt, wenn der Server gestartet wird; an diesem Punkt wird eine spezielle Pflege ausgeführt. Außerdem wird alle zwei Wochen eine Integritätsprüfung für Zeitgeberausdruck ausgeführt (über Nacht). Meist ist der Standardwert angemessen. Wenn der Durchsatz hoch ist, dauert die Bereinigung länger, sollte jedoch häufiger ausgeführt werden; wenn der Durchsatz niedrig ist, verhält es sich umgekehrt. Aus diesem Grund sollte dieser Wert nicht zu sehr erhöht werden, da dies zu Ausführungsausfällen oder schlechter Leistung führen könnte, wenn die Arbeitslast sich plötzlich deutlich erhöht (z. B. nach einem Import oder einer Attributhinzufügung).
formula.background.interval ms 10000 Nein Die Häufigkeit, mit der die Ausdruckswarteschlange auf neue, nicht zugeordnete Ausdrücke überprüft wird, die ausgeführt werden müssen. Wenn ein Stapel abgeschlossen ist, wird ohne Berücksichtigung des Intervalls sofort eine neue Überprüfung ausgeführt. Wenn die Warteschlange noch nicht "abgearbeitet" wurde, wenn das nächste Intervall beginnt, wird ein neuer Worker-Thread gestartet, um den Aufwand zu verdoppeln. In früheren Versionen von Rational Focal Point erfolgte die Ausführung asynchron und sofort. Wenn Ausdrücke in die Datenbank versetzt wurden, war dies nicht ohne das Risiko von Deadlocks möglich. Dies ist das Intervall, mit dem die Ausdruckswarteschlange auf neue auszuführende Ausdrücke überprüft wird, d. h. die maximale Zeit (plus Ausführungszeit), die der Benutzer warten muss, bis ein Ausdruck ausgeführt wird. Wenn das Intervall zu kurz ist, verbraucht es nur unnötig Ressourcen. Dies hat auch Auswirkungen auf die Lastverlaufssteuerung bei der Nebenläufigkeit: Wenn der Worker-Thread, der im vorherigen Intervall gestartet wurde, nicht innerhalb des Intervalls abgeschlossen wird, wird ein weiterer Thread (bis der Wert für thread.per.nodes erreicht ist) gestartet. Erfolgt die Lastverlaufssteuerung langsam, können Sie diesen Wert reduzieren. Wenn nur selten Ausdrücke verwendet werden, können Sie den Wert leicht erhöhen.
formula.max.background.threads.per.node Anzahl 2 Nein Die maximale Anzahl gleichzeitig ausgeführter Threads, die Ausdrücke für jeden Knoten ausführen. Die tatsächliche maximale Anzahl ist dynamisch davon abhängig, ob freie Threads im Anwendungsthread-Pool vorhanden sind. Aufgrund der bei background.interval beschriebenen Lastverlaufssteuerung bei der Nebenläufigkeit wird die Anzahl der Ausdrucksauswertungsthreads im Knoten für jedes Intervall erhöht, wenn weitere Arbeit auszuführen ist. Beachten Sie, dass dies ein maximaler Wert ist. Er erfordert freie Threads in einem Anwendungsthread-Pool, der automatisch im Hinblick auf die Anzahl Kerne (virtuelle oder andere) optimiert wird. Er ist außerdem dahingehend begrenzt, dass nicht der letzte Thread im Pool verbraucht werden darf. Sie können mit diesem Wert experimentieren, da dies keine Unterbrechung von Operationen zur Folge hat. Eine Verbesserung der Leistung kann jedoch nicht garantiert werden, da dies in hohem Maße von der Fähigkeit der Datenbank zur Nebenläufigkeit abhängig ist. Ein Anzeichen für eine zu geringe Nebenläufigkeit ist, dass die Warteschlange sehr häufig Ausdrücke enthält, die nicht ausgewertet werden.
formula.cleanup.enabled boolesch true Ja Die Bereinigung der Ausdruckswarteschlange ist standardmäßig aktiviert. Sie muss nur für Debuggingzwecke oder zur Ausführung von Leistungsmessungen inaktiviert werden, bei denen eine Bereinigung ausgeschlossen werden muss. Für diese Einstellung muss keine Optimierung erfolgen; sie darf nicht geändert werden; behalten Sie den Standardwert "true" bei.

Feedback