Oracle
 sql >> Datenbank >  >> RDS >> Oracle

12c Adaptive Pläne in SQL Developer

Ich habe daran gearbeitet, einige SQL-Anweisungen in einer neu aktualisierten Datenbank von Oracle 11.2.0.4 auf 12.1.0.2 zu optimieren. Wie ich es normalerweise tue, verwende ich gerne SQL Developer, um den Explain-Plan anzuzeigen. Ich war überrascht, grauen Text in der Ausgabe von Explain Plan zu sehen, die Sie unten sehen können.

Meine erste Reaktion war, auszuflippen und mich zu fragen, warum Oracle sowohl einen Hash-Join als auch einen Nested-Loops-Join hat, um zwei Tabellen zu verbinden. Später im Plan sehe ich einen INDEX (FAST FULL SCAN) derselben Tabelle, für die der INDEX (RANGE SCAN) durchgeführt wurde. Warum zwei Zugriffe auf dieselbe Tabelle? Was macht Oracle 12c?

All dies ist Teil der Adaptive Query Optimization des neuen 12c Optimizers. Für diese SQL-Anweisung hat der Optimierer festgelegt, einen anfänglichen Plan zu verwenden, der den Nested-Loops-Join beinhaltet. Für den Plan, der den Nested-Loops-Join beinhaltet, greift Oracle mit einem Index Range Scan auf die Tabelle zu. Der Optimierer hat auch entschieden, dass ein Index Fast Full Scan in einen Hash Join ein weiterer zu berücksichtigender Ausführungsplan sein könnte. Bevor die Ausführung der SQL-Anweisung beginnt, hat der Optimierer zwei Pläne. Ein Plan ist der Standard Plan und der andere Plan ist der adaptive planen. Oracle überwacht die Ausführung der SQL-Anweisung, wenn sie mit der Ausführung mit dem Standardplan beginnt. Wenn Oracle feststellt, dass dies der falsche Ausführungsplan ist, kann es spontan zum adaptiven Plan wechseln.

Weitere Informationen zu Adaptive Plans finden Sie in diesem Whitepaper von Oracle. Die Seiten 3-5 veranschaulichen Adaptive Join-Pläne in Aktion.

Der graue Text in der obigen Planerläuterung ist einfach der adaptive Plan. SQL Developer 4.1 zeigt sowohl den Standardplan als auch den adaptiven Plan.

Weiter unten im Explain Plan befindet sich der Abschnitt Other XML, der unten zu sehen ist. Wir können sehen, dass meine DB-Version 12.1.0.2 ist. Wir können auch den Infotyp zeigen, dass dies ein adaptiver Plan ist.

Beachten Sie den Abschnitt mit dem Titel „Zeilen“. Wir können jede Zeile des Explain-Plans sehen. Die Zeilen mit „skp=0“ sind Teil des Standardplans. Die Zeilen mit „skp=1“ sind der adaptive Plan, von dem wir jetzt wissen, dass er in SQL Developers als grauer Text angezeigt wird.