Ein einzelnes SQL-Statement kann durch einen ungünstigen Plan CPU, I/O oder Laufzeitgrenzen sprengen. Oracle Resource Manager kann solche Ausführungen nach den konfigurierten Limits beenden. Damit ist der aktuelle Lauf gestoppt – bei jedem erneuten Start könnte das Problem aber wieder auftreten. SQL Quarantine ergänzt diesen Schutz: Oracle kann den Ausführungsplan eines vom Resource Manager beendeten Statements für künftige Läufe quarantänisieren.
Plan statt SQL-Text unter Quarantäne
SQL Quarantine ist standardmäßig nicht automatisch aktiv: Der Parameter OPTIMIZER_CAPTURE_SQL_QUARANTINE steuert, ob Oracle Quarantäne-Konfigurationen automatisch anlegt. Ist die Erfassung aktiviert und beendet Resource Manager ein Statement wegen überschrittener Limits, kann Oracle den verwendeten Plan markieren. Wird derselbe SQL-Text später mit diesem Plan erneut gestartet und ist absehbar, dass die Resource-Manager-Grenze wieder verletzt wird, kann Oracle die Ausführung bereits vor dem teuren Lauf verhindern.
Wichtig ist die Granularität: Quarantänisiert wird ein Plan für ein Statement, nicht pauschal der SQL-Text. Ein anderer Plan kann weiterhin ausgeführt werden. So bleibt eine Abfrage nutzbar, wenn der Optimizer einen besseren Plan findet, während die bekannte problematische Variante abgefangen wird.
Mit Resource Manager zusammenspielen lassen
SQL Quarantine ersetzt keine Ressourcenlimits. Resource Manager ist die Schutzschicht, die Zeit-, CPU- oder I/O-Grenzen für eine Workload durchsetzt. Quarantine nutzt die Erfahrung einer bereits beendeten Ausführung, um Wiederholungen desselben Plans zu vermeiden. Vor einer produktiven Aktivierung sollten DBAs daher zunächst Consumer Groups und Limits passend zur Anwendung definieren und in einer repräsentativen Umgebung testen, ob legitime Abfragen betroffen wären.
Konfigurationen überwachen
Die View DBA_SQL_QUARANTINE zeigt unter anderem SQL-Statement, Plan-Hash, Status, Schwellenwerte und Zeitpunkt der letzten Verwendung. In V$SQL geben SQL_QUARANTINE und AVOIDED_EXECUTIONS Hinweise darauf, welcher Plan konfiguriert ist und wie oft eine Ausführung verhindert wurde. Prüfen Sie diese Werte nach Änderungen an Statistiken, Indizes oder Applikationscode, denn ein neuer Plan kann das Laufzeitverhalten verändern.
Wenn eine Konfiguration nicht mehr sinnvoll ist, kann ein berechtigter DBA sie über DBMS_SQLQ deaktivieren oder entfernen. Dokumentieren Sie den Grund und prüfen Sie nach der Anpassung, ob die Anwendung mit dem verfügbaren Plan stabil läuft.
Fazit
Resource Manager stoppt eine konkrete Überschreitung; SQL Quarantine kann die Wiederholung eines bekannten problematischen Plans verhindern. Zusammen liefern beide Funktionen eine zusätzliche Schutzebene für produktive Workloads – wenn Limits, Planwechsel und Quarantäne-Konfigurationen regelmäßig überprüft werden.
Weiterführend: Oracle-Dokumentation zu SQL Quarantine verwalten, zum Parameter OPTIMIZER_CAPTURE_SQL_QUARANTINE und zum Package DBMS_SQLQ.