Tutorial – EXPLAIN PLAN eines SQL Statements erstellen und anzeigen

von Tobias Redmann

Um einen EXPLAIN PLAN – Ausführungsplan eines SQL Statement unter Oracle erstellen und anzeigen zu lassen sind einige Arbeitschritte erforderlich. In diesen kleinen Tutorial gehe ich auf die Voraussetzungen, Durchführung und Auswertung in Bezug auf EXPLAIN PLANs ein.

Was ist ein EXPLAIN PLAN – Ausführungsplan

Kurz und knapp: Wie wird mein SELECT, UPDATE, INSERT oder DELETE Statement von der Oracle Datenbank verarbeitet, d.h. welche Arbeitsschritte wird die Datenbank durchführen damit ich mein gewünschtes Ergebnis erhalte.

Hier die offizielle Beschreibung aus der Oracle Dokumentation: Oracle Doku 11.2

PLAN_TABLE erstellen

Als Erstes muss eine Tabelle – PLAN_TABLE – erstellt werden. In dieser Tabelle werden alle notwendigen Informationen beim Erstellen eines EXPLAIN PLANs abgelegt. Dazu stellt Oracle im Verzeichnis $ORACLE_HOME/rdbms/admin/ das SQLPlus Script utlxplan.sql zur Verfügung.

Starten Sie SQLPlus und verbinden Sie sich mit der gewünschten DB und User. Führen Sie dann folgenden Befehl aus:

EXPLAIN PLAN – Ausführungsplan erstellen

Bei der Erstellung des EXPLAIN PLANs wird das eigentlich SQL Statement – SELECT, UPDATE, INSERT oder DELETE – nicht ausgeführt.
Es werden die von Oracle berechneten Arbeitsschritte inklusive der jeweiligen Kosten auf Basis des Optimizers sowie der Statistiken berechnet und in die von uns angegebene PLAN_TABLE eingefügt.

Wollen Sie die Tabelleneinträge in der PLAN_TABLE auch in andere Sessions sehen, müssen Sie die Transaktion erst mit einem COMMIT festschreiben.
Ich empfehle das jeder Datenbankbenutzer seine eigene PLAN_TABLE besitzt und nicht z.B. eine öffentlichen vom DB-USER sys.

EXPLAIN PLAN – Ausführungsplan anzeigen

Nachdem der EXPLAIN PLAN, wie oben beschrieben, erstellt wurde, kann mit der eigentlichen Analyse begonnen werden. Es gibt wie immer verschiedene Möglichkeiten sich das Ergebnis in verschiedensten Formen anzeigen zu lassen. Hier ein paar Beispiele.

Möchte man z.B. auf eine bestimmte StatementID zugreifen und oder auf eine eigene PLAN_TABLE, bietet die die Function DISPLAY noch zusätzliche Parameter an.
Hier ein paar Beispiele:

SCHREIBEN SIE EINEN KOMMENTAR