Database Reference
In-Depth Information
18.7.3
Hidden Hints mit SQL Plan Baselines
BeiOraclegibteseineFunktionDBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE,
welchedasVerfahrenmitdenHiddenHintsermöglicht.
)81&7,21/2$'B3/$16B)520B&85625B&$&+(5(78516%,1$5<B,17(*(5
$UJXPHQW1DPH7\SH,Q2XW'HIDXOW"
64/B,'9$5&+$5,1
3/$1B+$6+B9$/8(180%(5,1'()$8/7
64/B+$1'/(9$5&+$5,1
),;('9$5&+$5,1'()$8/7
(1$%/('9$5&+$5,1'()$8/7
Der Dokumentation von Oracle kann man folgendes entnehmen: das Setzen des Arguments
SQL_HANDLEbeimAufrufdieserFunktionistwichtig,wenneineSQL-Anweisungmit
OptimizerHintsgetuntwurdeundderjeweiligeAusführungsplanindieSQLPlanBaseline
der originellen SQL-Anweisung eingefügt werden muss. Damit dieses Verfahren funktio-
niert, muss eine SQL Plan Baseline für die originelle SQL-Anweisung angelegt werden, und
ein Cursor für die SQL-Anweisung mit Hints muss sich in der SQL-Area befinden. Das
ArgumentSQL_HANDLEmussdannaufdieSQLPlanBaselineverweisenunddieArgu-
menteSQL_IDundPLAN_HASH_VALUEaufdenAusführungsplandesCursorsausder
SQL-Area. Der Aufruf von DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE mit
diesen Argumenten speichert den getunten Ausführungsplan als eine zusätzliche SQL Plan
Baseline der SQL-Anweisung ohne Hints. Damit diese neue SQL Plan Baseline vom Optimi-
zergewähltwird,kannmansiemitdemStatusFIXED='YES'versehen(s.obendasjewei-
ligeArgument).Alternativkannmandieerste(nichtgetunte)SQLPlanBaselinelöschen.
Die Methode mit den Hidden Hints besteht somit aus den folgenden Schritten:
• zunächsteineSQLPlanBaselinefürdieoriginelleSQL-Anweisung(alsoohneHints)
anlegen. Wie es zu machen ist, ist im Abschn. 14.3.1 beschrieben,
• danacheinenCursorfürdieSQL-AnweisungmitHintsinderSQL-Areafindenunddie
SQL_IDundPLAN_HASH_VALUEseinesAusführungsplansinderViewV$SQLer-
mitteln. Wenn kein Cursor in der SQL-Area vorhanden ist, muss man die SQL-Anwei-
sung mit Hints ausführen (oder mit einem harten Call parsen) und danach diese zwei
Werte ermitteln. Die Vorgehensweise bei Ausführung ist klar. Wie man beim harten
Parse Call vorgeht, ist bereits im Abschn. 14.3.1 beschrieben worden,
• imabschließendenSchrittspeichertmandenAusführungsplanoderdenExplain-Plan
der SQL-Anweisung mit Hints in einer SQL Plan Baseline für die originelle SQL-An-
weisung. Das macht man mit dem Aufruf der Funktion DBMS_SPM.LOAD_PLANS_
FROM_CURSOR_CACHE.
EinharterParseCallkannhelfen,wenndiejeweiligeSQL-Anweisungnichtauszuführen
ist. Die Voraussetzung dafür ist, dass diese SQL-Anweisung keine DDL-Anweisung ist.
Search WWH ::




Custom Search