DB2 Universal Database - Systemverwaltung
Bevor Sie EXPLAIN-Daten für eine SQL-Anweisung abrufen können, müssen Sie
über eine Reihe von EXPLAIN-Tabellen verfügen, die mit demselben Schema wie
die zum Aufrufen der EXPLAIN-Einrichtung verwendete Berechtigungs-ID definiert
sind. Informationen über das Erstellen der Tabellen finden Sie in Tabellendefinitionen für EXPLAIN-Tabellen.
Wenn diese Tabellen definiert sind, werden EXPLAIN-Daten erfaßt, wenn eine
SQL-Anweisung kompiliert wird und EXPLAIN-Daten angefordert wurden:
- Bei statischen SQL-Anweisungen oder SQL-Anweisungen für
inkrementelles Binden (Incremental Bind) werden
EXPLAIN-Tabelleninformationen erfaßt, wenn eine der beiden Optionen EXPLAIN
ALL oder EXPLAIN YES in den Befehlen BIND oder PREP angegeben wird oder wenn
eine statische SQL-Anweisung EXPLAIN im Quellenprogramm verwendet wird.
Anmerkung: | Wenn SQL-Anweisungen zum inkrementellen Binden (Incremental Bind) zur
Laufzeit kompiliert werden, werden Sie zur Laufzeit, nicht während der
Bindeoperation, in den EXPLAIN-Tabellen plaziert. Das
Qualifikationsmerkmal und die Berechtigungs-ID der EXPLAIN-Tabelle, die für
den Einfügevorgang in die EXPLAIN-Tabellen verwendet werden, sind die des
Paketeigners und nicht die des Benutzers, der das Paket ausführt.
|
- Bei dynamischen SQL-Anweisungen werden unter einer der
folgenden Bedingungen EXPLAIN-Tabelleninformationen erfaßt:
-
Eine SQL-Anweisung EXPLAIN wird verwendet. Alle EXPLAIN-Informationen
werden erfaßt und in den EXPLAIN-Tabellen gespeichert, sofern nicht die
Klausel FOR SNAPSHOT angegeben wird.
Beispiel einer SQL-Anweisung EXPLAIN:
EXPLAIN PLAN FOR <eine gültige SQL-Anweisung DELETE, INSERT, SELECT, SELECT INTO,
UPDATE, VALUES oder VALUES INTO>
-
Das Sonderregister CURRENT EXPLAIN MODE ist auf YES gesetzt. Diese
Einstellung bewirkt, daß der SQL-Compiler EXPLAIN-Daten erfaßt, wobei die
SQL-Anweisung ausgeführt wird und die Ergebnisse der Abfrage
zurückgibt.
- Das Sonderregister CURRENT EXPLAIN MODE ist auf EXPLAIN gesetzt.
Diese Einstellung bewirkt, daß der SQL-Compiler EXPLAIN-Daten erfaßt, jedoch
wird die SQL-Anweisung nicht ausgeführt.
- Das Sonderregister CURRENT EXPLAIN MODE ist auf RECOMMEND INDEXES
gesetzt. Diese Einstellung weist den SQL-Compiler an, EXPLAIN-Daten zu
erfassen, und sorgt dafür, daß empfohlene Indizes in die Tabelle
ADVISE_INDEX eingefügt werden. Die SQL-Anweisung wird jedoch nicht
ausgeführt.
- Das Sonderregister CURRENT EXPLAIN MODE ist auf EVALUATE INDEXES
gesetzt. Diese Einstellung bewirkt, daß der SQL-Compiler die vom
Benutzer in die Tabelle ADVISE_INDEX eingefügten Indizes verwendet.
Der Benutzer fügt eine neue Zeile für jeden Index ein, der ausgewertet werden
soll. Die für jeden Index erforderlichen Informationen sind:
Indexname, Tabellenname und die Spaltennamen, aus denen der auszuwertende
Index besteht. Wenn das Sonderregister CURRENT EXPLAIN MODE eingegeben
wurde, sollte es auf EVALUATE INDEXES gesetzt werden. Der SQL-Compiler
durchsucht dann die Tabelle ADVISE_INDEX, in der das Feld USE_INDEX auf
"Y" festgelegt ist (diese Indizes werden als virtuelle Indizes
bezeichnet). Alle im Modus EVALUATE INDEXES ausgeführten dynamischen
Anweisungen werden von EXPLAIN so bearbeitet, als wären diese virtuellen
Indizes verfügbar. Der SQL-Compiler wählt in diesem Fall die virtuellen
Indizes, wenn sie die Leistung der Anweisungen verbessern. Ansonsten
werden die Indizes ignoriert. Durch Prüfen der EXPLAIN-Ergebnisse
können Sie feststellen, ob die vom Benutzer vorgeschlagenen Indizes vom
SQL-Compiler verwendet wurden. Die verwendeten Indizes sollten zur
Verbesserung des Zugriffs implementiert werden.
- Die Option EXPLAIN ALL wurde im Befehl BIND oder PREP angegeben.
Diese Einstellung bewirkt, daß der SQL-Compiler EXPLAIN-Daten für dynamisches
SQL zur Laufzeit erfaßt, auch wenn die Einstellung des Sonderregisters CURRENT
EXPLAIN MODE den Wert NO hat. Die SQL-Anweisung wird ausgeführt, und
die Abfrageergebnisse werden zurückgegeben.
Anmerkung: | Die EXPLAIN-Informationen werden nur erfaßt, wenn die SQL-Anweisung
kompiliert wird. Nach der einleitenden Kompilierung werden dynamische
SQL-Anweisungen nur erneut kompiliert, wenn eine Änderung an der Umgebung das
erneute Kompilieren einer Anweisung erforderlich macht. Wenn dieselbe
Anweisung PREPARE mehrmals für die gleiche SQL-Anweisung ausgeführt wird,
erfolgt das Kompilieren der SQL-Anweisung und daher auch das Erfassen der
EXPLAIN-Daten nur beim ersten Ausführen der Anweisung PREPARE, da angenommen
wird, daß sich die Umgebung nicht ändert.
|
Weitere Informationen zur Verwendung der SQL-Anweisung EXPLAIN bzw.
zur Verwendung des Registers CURRENT EXPLAIN MODE finden Sie im Handbuch SQL Reference. Weitere Informationen zu den Befehlen BIND und PREP finden Sie im
Handbuch Command Reference.
EXPLAIN-Momentaufnahmedaten werden erfaßt, wenn eine
SQL-Anweisung kompiliert wird und EXPLAIN-Daten angefordert wurden:
- Bei statischen SQL-Anweisungen oder SQL-Anweisungen für
inkrementelles Binden (Incremental Bind) wird eine
EXPLAIN-Momentaufnahme erfaßt, wenn eine der beiden Klauseln EXPLSNAP ALL oder
EXPLSNAP YES in den Befehlen BIND oder PREP angegeben wird oder wenn eine
statische SQL-Anweisung EXPLAIN mit der Klausel FOR SNAPSHOT oder WITH
SNAPSHOT im Quellenprogramm verwendet wird.
Anmerkung: | Wenn SQL-Anweisungen zum inkrementellen Binden (Incremental Bind) zur
Laufzeit kompiliert werden, werden Sie zur Laufzeit, nicht während der
Bindeoperation, in den EXPLAIN-Tabellen plaziert. Das
Qualifikationsmerkmal und die Berechtigungs-ID der EXPLAIN-Tabelle, die für
den Einfügevorgang in die EXPLAIN-Tabellen verwendet werden, sind die des
Paketeigners und nicht die des Benutzers, der das Paket ausführt.
|
- Für dynamische SQL-Anweisungen wird unter einer der folgenden
Bedingungen eine EXPLAIN-Momentaufnahme erfaßt:
- Eine SQL-Anweisung EXPLAIN mit der Klausel FOR SNAPSHOT oder WITH SNAPSHOT
wird verwendet.
Bei Angabe der Klausel FOR SNAPSHOT werden außer den Daten für die
EXPLAIN-Momentaufnahme keine EXPLAIN-Tabelleninformationen erfaßt. Mit
der Klausel WITH SNAPSHOT werden neben den Daten für die
EXPLAIN-Momentaufnahme auch alle EXPLAIN-Tabelleninformationen erfaßt.
Das folgende Beispiel zeigt eine SQL-Anweisung EXPLAIN mit der Angabe zur
Erstellung einer EXPLAIN-Momentaufnahme:
EXPLAIN PLAN FOR SNAPSHOT FOR <eine gültige SQL-Anweisung DELETE, INSERT, SELECT,
SELECT INTO, UPDATE, VALUES oder VALUES INTO SQL>
Es wird lediglich eine EXPLAIN-Momentaufnahme erstellt, und die erfaßten
Informationen werden in den Tabellen EXPLAIN_INSTANCE und EXPLAIN_STATEMENT
gespeichert.
- Das Sonderregister CURRENT EXPLAIN SNAPSHOT ist auf YES gesetzt.
Diese Einstellung bewirkt, daß der SQL-Compiler eine Momentaufnahme der
EXPLAIN-Daten erstellt, wobei die SQL-Anweisung ausgeführt wird und die
Abfrageergebnisse übergeben werden.
- Das Sonderregister CURRENT EXPLAIN SNAPSHOT ist auf EXPLAIN
gesetzt. Diese Einstellung bewirkt, daß der SQL-Compiler eine
Momentaufnahme der EXPLAIN-Daten erstellt, wobei die SQL-Anweisung jedoch
nicht ausgeführt wird.
- Die Option EXPLSNAP ALL wurde im Befehl BIND oder PREP angegeben.
Diese Einstellung bewirkt, daß der SQL-Compiler eine Momentaufnahme der
EXPLAIN-Daten zur Laufzeit erstellt, auch wenn die Einstellung des
Sonderregisters CURRENT EXPLAIN SNAPSHOT auf NO gesetzt ist. Die
SQL-Anweisung wird ausgeführt, und die Abfrageergebnisse werden
zurückgegeben.
Anmerkung: | Die EXPLAIN-Informationen werden nur erfaßt, wenn die SQL-Anweisung
kompiliert wird. Nach der einleitenden Kompilierung werden dynamische
SQL-Anweisungen nur erneut kompiliert, wenn eine Änderung an der Umgebung das
erneute Kompilieren einer Anweisung erforderlich macht. Wenn dieselbe
Anweisung PREPARE mehrmals für die gleiche SQL-Anweisung ausgeführt wird,
erfolgt das Kompilieren der SQL-Anweisung und daher auch das Erfassen der
EXPLAIN-Daten nur beim ersten Ausführen der Anweisung PREPARE, da angenommen
wird, daß sich die Umgebung nicht ändert.
|
Weitere Informationen zur Verwendung der SQL-Anweisung EXPLAIN und der
Klauseln FOR SNAPSHOT bzw. WITH SNAPSHOT sowie zur Verwendung des
Registers CURRENT EXPLAIN SNAPSHOT finden Sie im Handbuch SQL Reference. Weitere Informationen zu den Befehlen BIND und PREP
finden Sie im Handbuch Command Reference.
[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]