Effizienz mit dem Priority Transactions Parameter

06.
Dezember
2024
Veröffentlicht von: Daniel Jaouadi

Mit der Database 23ai hat Oracle eine spannende Neuerung eingeführt: die Möglichkeit, Transaktionen mittels des Parameters TXN_PRIORITY gezielt zu priorisieren. Diese Funktion erlaubt es, kritische Workloads zu bevorzugen, Konflikte zu minimieren und die Datenbankleistung dynamisch zu steuern – ohne umfangreiche Konfigurationen oder Ressource-Pläne.

Effizienz mit dem Priority Transactions Parameter

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:

  • TXN_PRIORITY
    stuft die Transaktionen in Prioritäten ein 
  • PRIORITY_TXNS_HIGH_WAIT_TARGET
    gibt an, wie lange Transaktionen mit HIGH maximal warten, bevor andere Transaktionen zurückgerollt werden (In Sekunden)
  • PRIORITY_TXNS_MEDIUM_WAIT_TARGET
    gibt an, wie lange Transaktionen mit MEDIUM maximal warten, bevor andere Transaktionen zurückgerollt werden (In Sekunden)
  • PRIORITY_TXNS_MODE
    definiert, wie mit Prioritätskonflikten umgegangen wird

Aktueller Stand

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.

Die Lösung

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.

Konfiguration und Feintuning

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:

  • HIGH: default Wert, höchste Priorität, bevorzugte Behandlung bei Konflikten
  • MEDIUM: mittlere Priorität, unter HIGH, aber über LOW
  • LOW: niedrige Priorität, unter MEDIUM 

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';

Warteparameter

Um mehr Kontrolle über das Priorisierungsverhalten zu haben, gibt es folgende Parameter

  • PRIORITY_TXNS_HIGH_WAIT_TARGET
  • PRIORITY_TXNS_MEDIUM_WAIT_TARGET

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.

Produktion oder Trockenlauf?

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:

  • TRACK: Überwacht und sammelt Informationen zu Prioritätskonflikten ohne aktiv Transaktionen zurückzurollen.
  • ROLLBACK: Aktiviert die Funktion und setzt das beschriebene Priorisierungsverhalten um.

Track

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!
 

Fazit

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.

 

 

 

Jede Menge Know-how für Sie!

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.