DOAG Datenbank Kolumne: Compatible, der vergessene Parameter?

  • Erstellt von Ernst Leber
  • Datenbank Kolumne, Datenbank

Vor einiger Zeit meldete ein Kunde Probleme mit einem Batch-Job.

Seit Monaten brauchte dieser Batch-Job je nach Datenlage bis zu 18 Stunden für einen Durchlauf. Das Problem wurde erst relativ spät gefunden, weil das Ergebnis des Jobs zeitlich unkritisch war, aber die CPU-Last in der Datenbank zur Laufzeit dieses Batchjobs deutlich anstieg.

Weil das Problem bereits seit einiger Zeit in der Datenbank existierte, konnte der ursprüngliche, schnelle Ausführungsplan nicht mehr ausgelesen werden. 

Auf der Q-Datenbank, die aus einem Data Pump Dump der Prod-Datenbank erstellt worden war, lief das Statement problemlos. Also wurden die Ausführungspläne der Statements verglichen und es wurden erhebliche Unterschiede gefunden, was ja zu erwarten war. 

Fehleranalyse und Behebung

Es stellte sich die Frage, warum die Ausführungspläne bei gleicher Datenbank so unterschiedlich waren. Daher wurden die Parameter der Datenbank verglichen. Die Optimizer-Parameter waren auf beiden Datenbanken identisch. Bei gleicher Datenlage und identischen Tabellen- und Indexstrukturen unterschiedliche Ausführungspläne, wie kann das sein?

Eine komplette Analyse der Datenbankparameter zeigte Unterschiede bei Cache-Parametern, die aber die abweichenden Pläne nicht erklären konnten.  Also weitersuchen. Schlussendlich war es der Parameter Compatible. Auf der Q-Datenbank stand dieser auf 19.0.0.0 und auf der Prod auf 12.2.0.0. Damit war klar, warum die Ausführungspläne unterschiedlich waren. Bei der Migration der Datenbanken wurde schlicht vergessen, den Compatible-Parameter auf der Prod-Datenbank anzupassen.

Das löste aber das Laufzeitproblem des SQL-Statements nicht, schließlich muss die Datenbank für die Anpassung des Parameters Compatible neu gestartet werden, was bei einer Prod-Datenbank nicht einfach möglich ist.

Daher wurde der Ausführungsplan des Statements analysiert und aufgrund der Zugriffsmethoden auf die Tabellen kam der Verdacht auf, dass für die mit Compatible erzwungene Version des Optimizers Indexe auf den Tabellen fehlten. Mit Hilfe des SQL-Tuning Advisors und des Access Advisors wurde das Statement weiter analysiert. Der Output der Advisor erhärtete diesen Verdacht. Nach Analyse der Vorschläge und Vergleich mit den eigenen Erkenntnissen wurden die empfohlenen Indexe erstellt. Damit war das Laufzeitproblem behoben.

Die Empfehlung

Abschließend meine Empfehlung: Setzen Sie nach einem Upgrade der Datenbank den Parameter Compatible auf den von Oracle empfohlenen Wert. Wenn Sie wie im vorliegenden Fall eine Q-Datenbank haben, machen Sie das Upgrade zunächst auf der Q und testen mit der neuen Compatible-Einstellung. Wenn es hier keine Probleme gibt, setzen Sie Compatible auf der Prod-Datenbank im Zuge des Upgrades.

 

Ernst Leber

 

.........

Bild von kat7214 auf Pixabay