|
Ausführungspläne mit DBMS_XPLAN
von Ulrike Schwinn, ORACLE Deutschland GmbH
Ändern sich Applikationen oder die Umgebung durch Einspielen von Patches, Änderungen an Initialisierungsparametern, Änderungen an den Storageparametern oder Zugriffsstrukturen besteht
häufig die Notwendigkeit, Ausführungspläne zu generieren und zu analysieren. Die Oracle Datenbank liefert schon seit langer Zeit unterschiedliche Methoden und Instrumente, um die Ausführungen
von SQL Statements zu monitoren und die zugehörigen Ausführungspläne zu generieren. Auch eine graphische Implementierung findet sich beispielsweise in den beiden Werkzeugen SQL Developer und
Enterprise Manager. So werden Ausführungspläne im Enterprise Manager nach Bedarf über die speziellen Links im Bereich
Performance (siehe SQL Monitoring, SQL Tuning Set, Top Activity und SQL Performance Analyzer) angezeigt.
Das SQL Monitoring ist dabei ein wichtiges Hilfsmittel, um Statements zu analysieren, die parallel laufen, den MONITOR Hint besitzen oder
mindestens 5 Sekunden CPU bzw. I/O Zeit benötigen. Eine Implementierung findet sich im Enterprise Manager und im SQL Developer Release 3.0 Early Adopter. Der folgende Ausschnitt zeigt das SQL Monitoring
im Enterprise Manager.
Für eine größere Ansicht auf das Bild klicken.
Der folgende Ausschnitt zeigt die Implementierung im aktuellsten SQL Developer 3.0 Early Adopter Release.
Für eine größere Ansicht auf das Bild klicken.
Wichtiger Hinweis: Zur Verwendung dieses Features ist die Lizensierung des Tuning Packs notwendig.
Möchte man ausführliche Informationen über die Ausführungspläne erhalten, obwohl das Tuning Pack (noch) nicht im Einsatz ist, oder möchte man unabhängig von
graphischen Implementierungen der Oracle Werkzeuge sein, sollte man das Package DBMS_XPLAN verwenden. Einfache Aufrufe
von DBMS_XPLAN sind übrigens in den vorgefertigten Skripten utlxplp.sql (parallele Ausführung) und utlxpls.sql (serielle Ausführung) im Verzeichnis $ORACLE_HOME/rdbms/admin zu finden.
Der folgende Tipp zeigt häufig verwendete Funktionen von DBMS_XPLAN und darüberhinaus Funktionalitäten, die weniger bekannt aber sehr hilfreich
sein können. In allen Beispielen wird Oracle Database 11g Release 2 verwendet.
Die Funktionen im Überblick
Bevor das Package DBMS_XPLAN zum Einsatz kommen kann, sollte man sicher stellen, dass ausreichende Zugriffsrechte vorhanden sind.
SELECT-Rechte auf verschiedene Data Dictionary Views (siehe Handbucheintrag) sind dazu nötig.
Zur Vereinfachung kann die SELECT_CATALOG_ROLE Rolle vergeben werden, die diese Privilegien beinhaltet.
DBMS_XPLAN besteht hauptsächlich aus 6 Funktionen, die jeweils formatierte Ausführungspläne aus folgenden unterschiedlichen Quellen anzeigen:
- DISPLAY: Informationen stammen aus einer Plan Table.
- DISPLAY_PLAN: Informationensquelle wie bei DISPLAY; zusätzlich ist die Ausgabe in unterschiedlichen Formaten wie HTML möglich.
- DISPLAY_AWR: Informationen stammen aus AWR Reports.
- DISPLAY_CURSOR: Informationen stammen aus einem aktuell ausgeführten Cursor, der sich im Cursor Cache befindet.
- DISPLAY_SQL_PLAN_BASELINE: Informationen stammen aus SQL Plan Baselines.
- DISPLAY_SQLSET: Informationen sind im SQL Tuning Set gespeichert.
Bei den Funktionen handelt es sich um TABLE Funktionen, die bis auf die Funktion DISPLAY_PLAN eine Collection - eine Ansammlung von Zeilen -
zurückliefert. Die Verwendung erfolgt in der FROM Klausel der Abfrage nach dem Schlüsselwort TABLE. Alle Funktionen haben ein Eingabe-Argument
für SQL_ID oder SQL_HANDLE und ein Argument für FORMAT, das eine umfangreiche Ausgabe ermöglicht. Im Folgenden liegt der Fokus auf
der häufig verwendeten Funktion DISPLAY_CURSOR und der Funktion DISPLAY_PLAN.
Die TABLE Funktion DISPLAY_CURSOR
Mit dieser Funktion können Ausführungspläne von aktuellen Cursorn angezeigt werden. Mit den Argumenten SQL_ID und CHILD_ID kann dabei ein bestimmtes
Statement aus dem Cursor Cache ausgewählt werden. Wird kein Wert angegeben, wird das zuletzt ausgeführte Statement verwendet. Das Argument FORMAT beeinflusst
den Umfang und den Inhalt der Ausgabe und besitzt 4 Standardwerte - BASIC, TYPICAL(Default), SERIAL, ALL. Folgende Beispiele illustrieren die
Verwendung. Als Cursor dient dabei das folgende Statement.
Nimmt man die Standardwerte als Eingabewerte, erhält man folgende Ausgabe.
Beachten Sie bitte den Bereich "Note", der nützliche Informationen über die Statistiken, die Verwendung des SQL Plan Management, den Einsatz von Auto DOP usw. liefert.
In unserem Fall gibt es beispielsweise keine Statistiken. Das gleiche Ergebnis liefert übrigens folgende Abfrage:
Nutzt man hingegen ALL als Formatierungswert, werden zusätzlich Informationen zu Projektionen und die Aliaswerte ausgegeben.
Die Formatausgabe kann durch zusätzliche Parameter beeinflusst - erweitert oder eingeschränkt - werden. Interessante Erweiterungen bieten beispielsweise
die Werte IOSTATS LAST oder IOSTATS ALL. In der Ausgabe werden zusätzliche Spalten wie A-Rows (actual rows) und E-Rows (estimated rows) zur Verfügung gestellt, die Hinweise auf die Güte der Optimizer-Schätzungen geben können.
So deutet eine große Differenz der Werte in diesen Spalten (hier 8114-1081) auf eine ungenaue Abschätzung des Optimizers hin.
In unserem Beispiel sind die Statistiken
veraltet, daher erklärt sich die Differenz. Um diese Funktion nutzen zu können, ist die zusätzliche Angabe des Hints GATHER_PLAN_STATISTICS
oder der Parameterwert ALL für STATISTICS_LEVEL notwendig. Das Schlüsselwort LAST zeigt dabei an, dass sich die Statistiken auf die
letzte Cursor-Ausführung beziehen.
Die Spalten E-Rows und A-Rows können Sie auch in den SQL Monitoring Screenshots im oberen Abschnitt dieses Tipps finden. A-Rows wird dort mit
aktuelle Zeilen oder actual_rows und E-Rows mit geschätzte Zeilen oder estimated_rows bezeichnet.
Die TABLE Funktion DISPLAY_PLAN
Mit der Funktion DISPLAY_PLAN ist es möglich, einen in einer Plan Table (hier PLAN_TABLE) gespeicherten Ausführungsplan auszugeben. Im Unterschied zu DISPLAY können
unterschiedliche Ausgabetypen wie HTML, TEXT oder XML ausgewählt werden. Die Ausgabe erfolgt dabei als CLOB.
Zusätzlich kann ein Filterprädikat mitgegeben werden, um den entsprechenden Plan aus der Plan Table zu filtern. Die Spalte PLAN_ID der Plan Table
stellt ein gutes Beispiel für ein geeignetes Filterkriterium dar. Folgendes Beispiel zeigt die Anwendung im TEXT Format mit
der Filterbedingung PLAN_ID=53.
Nutzt man den Ausgabetyp HTML, sieht das Ergebnis im Browser folgendermassen aus.
Für eine größere Ansicht auf das Bild klicken.
Weitere Tipps und Hinweise
Ausführungspläne generieren und interpretieren ist ein wichtiger Bestandteil des Tuningprozesses.
Die Nutzung weiterer Werkzeuge und Advisories kann darüberhinaus den Prozess abkürzen oder
gar überflüssig machen. Folgende Liste gibt einen kurzen Überblick über die veröffentlichten Tipps zu diesem Thema:
Mehr zu diesem Thema werden Sie in den nächsten Ausgaben finden ...
Zurück zur Community-Seite
|