Oracle Database 23ai bietet eine Möglichkeit, Transaktionen effizient und leicht, im Falle eines Row Locks, zu priorisieren, um transaktionsstarke Umgebungen zu optimieren. Mit der Einführung von Priority Transactions können Sie entscheiden, wie konkurrierende Workloads behandelt werden, indem Sie kritischen Aufgaben Vorrang geben. Dafür stehen vier zentrale Parameter zur Verfügung:
Blockierende Sessions entstehen häufig durch Transaktionen, die ohne Rollback oder Commit Row Locks aktiv halten. Dies tritt vor allem bei DML-Befehlen wie INSERT, UPDATE, DELETE oder SELECT ... FOR UPDATE auf.
Der Row Lock wird aufrechterhalten bis die Transaktion abgeschlossen wird (COMMIT/ROLLBACK). Im schlimmsten Fall führt dies zu schwerwiegenden Auswirkungen, wie blockierten Workloads oder einem Applikations-Stillstand.
Oft wird ein DBA gerufen, um die blockierende Session manuell mittels ALTER SYSTEM KILL zu beenden. Dies birgt Risiken: Manche Anwendungen verkraften den abrupten Verlust einer Session nicht und erzeugen Folgeprobleme.
Mit dem Priority-Transactions-Feature ist der Umgang mit blockierenden Sessions viel eleganter.
Anstatt die blockierende Session manuell zu beenden, werden stattdessen, anhand einer Prioritätszuweisung, alle „weniger wichtigeren“ Transaktionen zurückgerollt. Dabei bleibt die Session der blockierenden Transaktion aktiv.
Wichtig ist, dass die Anwendung in der Lage ist, die resultierenden ORA-Fehler zu erkennen und entsprechend zu reagieren:
| ORA-63300: This transaction was holding a row lock that blocked a higher priority transaction from another session. The blocked transaction has rolled back this transaction after waiting for the configured target wait time (using PRIORITY_TXNS_HIGH_WAIT_TARGET or PRIORITY_TXNS_MEDIUM_WAIT_TARGET. |
|---|
Sollte die Applikation diesen Fehler nicht bestätigen (und entsprechend einen ROLLBACK ausführen), folgt dieser Fehler...
| ORA-63302: Transaction was automatically rolled back since it is being blocking a higher priority transaction from another session. |
|---|
...bis er acknowledged wurde.
Das Herzstück dieses Features ist der TXN_PRIORITY Parameter.
Dieser kümmert sich um die Einstufung der Transaktionen in eine der folgenden Prioritäten:
Dieser Parameter ist mit alter session zu setzen und bleibt bestehen, bis die Session abgebaut wird, oder anders gesetzt wird.
ALTER SESSION SET txn_priority = 'HIGH';
Um mehr Kontrolle über das Priorisierungsverhalten zu haben, gibt es folgende Parameter
Diese Systemparameter geben die maximale Zeit (in Sekunden) an, wie lange eine Transaktion mit der Priorität High oder MEDIUM wartet, bevor die Datenbank eine Transaktion niedrigerer Priorität zurückrollt, die einen Row Lock aufrechterhält.
Beispielsweise bedeutet der Befehl...
ALTER SYSTEM SET priority_txns_high_wait_target = 5;
...dass eine Transaktion mit der Priorität HIGH mindestens 5 Sekunden warten wird, bevor sie den Row Lock auflöst und die blockierende (MEDIUM oder LOW) Transaktion zurückrollt. Die tatsächliche Wartezeit kann variieren, insbesondere wenn mehrere blockierte Transaktionen gleichzeitig vorhanden sind.
Hinweis
Sollte ein RAC in Verwendung sein, können pro Knoten unterschiedliche Werte gesetzt sein.
Wichtig ist außerdem, dass das Priority Transaction-Feature nur dann aktiv ist, wenn TXN_PRIORITY und die Warteparameter gemeinsam konfiguriert sind. Wird nur einer dieser Parameter gesetzt, bleibt das Feature inaktiv.
Ein weiterer praktischer Parameter hilft dabei, optimale Werte für die Priorisierung zu finden, ohne sofort tiefgreifende Änderungen an der Transaktionslogik vorzunehmen: PRIORITY_TXNS_MODE. Dieser Parameter kann auf folgende Werte gesetzt werden:
Der TRACK-Wert ist ideal für DBAs, die Priority Transactions zunächst testen möchten. In diesem Modus sammelt die Datenbank Informationen über Konflikte unter normaler Workload. Während dieser Zeit kann man in der V$SYSSTAT View sehen, welche Transaktionen mit welcher Priorität warten (Event="enq: TX – row lock%" - (HIGH/MEDIUM/LOW priority).
Nach einer ausreichenden Testphase können Sie mit Hilfe der gesammelten Daten die Warteparameter optimieren. Sobald die idealen Werte gefunden wurden, lässt sich der Parameter auf ROLLBACK setzen, um das Feature aktiv zu schalten.
Hinweis
Sofern ein RAC in Verwendung ist, müssen auf allen Knoten die gleichen Werten gesetzt sein!
Die Einführung des Priority Transactions Features in Oracle Database 23ai bringt eine effiziente und flexible Möglichkeit, Transaktionen zu priorisieren und Konflikte dynamisch zu lösen. Mit dem Parameter TXN_PRIORITY und den zugehörigen Wartezeitparametern können Datenbankadministratoren kritische Workloads gezielt bevorzugen und die Systemstabilität erhöhen. Dank der Option, den Modus auf TRACK zu setzen, lassen sich die Auswirkungen risikofrei testen, bevor die Funktion produktiv genutzt wird. Dieses Feature bietet damit eine praktikable Lösung für ressourcenintensive Umgebungen, ohne dass aufwendige Konfigurationen erforderlich sind. Gerne unterstützen wir Sie bei der Einführung dieses Features und der Analyse von weitere Performance-Problemen.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.