Optimizer Adaptive Features in der Oracle Database Version 12.1

Die guten Ideen des Oracle Optimizer Development Teams haben in der Version 12.1 leider nicht immer zur Verbesserung der Performance geführt. Hierfür ist in vielen Fällen der Bereich Adaptive Statistics verantwortlich.

Auch bei frischen und guten Statistiken kann der Optimizer auf die Idee kommen, während der Parse-Phase eines SQL-Befehls dynamisch neue Statistiken zu sammeln. Dies ist im Bereich Dynamic Statistics, früher als Dynamic Sampling bekannt, angeordnet und auch mit Standardeinstellungen wesentlich häufiger aktiv als in früheren Versionen. (Hier zeigt sich wieder einmal: Es ist Vorsicht geboten, wenn Oracle ein lange bekanntes Feature umbenennt…)

Anzeichen für das Problem sind insbesondere hohe Parse-Zeiten und generell eine wesentlich höhere CPU-Auslastung z.B. nach einem Upgrade der Datenbank-Software.

Es hat sich herausgestellt, dass in vielen Fällen das Abschalten der adaptiven Optimizer-Features mit Hilfe des Parameters

optimizer_adaptive_features = FALSE

das Mittel der Wahl ist, um das Problem in den Griff zu bekommen. Leider werden hiermit auch die adaptiven Pläne abgeschaltet.

Ab der Version 12.2 ist der Parameter optimizer_adaptive_features obsolet und wird ersetzt durch die beiden folgenden Parameter mit den Standardeinstellungen

optimizer_adaptive_statistics = FALSE
optimizer_adaptive_plans = TRUE

Die gute Nachricht ist nun, dass es Patch 22652097 gibt, der einen Backport dieser neuen Parameter für Version 12.1 darstellt.

Somit können auch für die Version 12.1.0.2 die adaptiven Statistiken abgeschaltet werden, adaptive Pläne aber angeschaltet blieben.

Zusätzlich gibt es Patch 21171382, der das automatische Sammeln von extended Statistiken (für automatisch bestimmte Spaltengruppen) abschaltet. Man kann dies nun über die Optimizer-Präferenz AUTO_STATS_EXTENSIONS steuern. Auch dies ist ein Backport eines 12.2er „Features“.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.