DB2 Universal Database - Systemverwaltung
Sämtliche EXPLAIN-Informationen sind nach dem Konzept eines EXPLAIN-Exemplars
organisiert. Ein EXPLAIN-Exemplar stellt einen Aufruf der
EXPLAIN-Einrichtung für eine oder mehrere SQL-Anweisungen dar. Ein
EXPLAIN-Exemplar enthält die EXPLAIN-Informationen für:
- Alle auswählbaren SQL-Anweisungen eines Pakets für statische
SQL-Anweisungen
- Eine bestimmte SQL-Anweisung für SQL-Anweisungen zum inkrementellen Binden
(Incremental Bind)
- Eine bestimmte SQL-Anweisung für dynamische SQL-Anweisungen
- Jede SQL-Anweisung EXPLAIN (dynamisch und statisch)
Die EXPLAIN-Informationen, die innerhalb eines EXPLAIN-Exemplars erfaßt
werden, schließen die Umgebung der SQL-Kompilierung und den zur Ausführung der
SQL-Anweisung, die kompiliert wird, ausgewählten Zugriffsplan mit ein.
EXPLAIN-Informationen werden für drei Untergruppen getrennt organisiert:
- EXPLAIN-Exemplare
- Informationen zur Kompilierungsumgebung, die für jedes EXPLAIN-Exemplar
erfaßt werden
- EXPLAIN-Momentaufnahmen
- Informationen, die von Visual Explain verwendet werden
- EXPLAIN-Tabellen
- Informationen, die gesammelt werden, wenn die
EXPLAIN-Tabelleninformationen angefordert werden
Informationen über EXPLAIN-Exemplare werden in der Tabelle EXPLAIN_INSTANCE
gespeichert. Zusätzliche spezifische Informationen zu jeder
SQL-Anweisung, die innerhalb eines EXPLAIN-Exemplars bearbeitet wurde, werden
in der Tabelle EXPLAIN_STATEMENT gespeichert.
Kennzeichnung von EXPLAIN-Exemplaren: Anhand der folgenden
Informationen können Sie jedes EXPLAIN-Exemplar identifizieren und die
Informationen für SQL-Anweisungen einem bestimmten Aufruf der Einrichtung
zuordnen:
- Der Benutzer, der die EXPLAIN-Informationen anforderte
- Der Zeitpunkt, zu dem die EXPLAIN-Anforderung begann
- Der Name des Pakets, aus dem die mit EXPLAIN bearbeitete SQL-Anweisung kam
- Das Schema des Pakets, aus dem die mit EXPLAIN bearbeitete SQL-Anweisung
kam
- Eine Angabe, ob eine Momentaufnahme Teil der EXPLAIN-Anforderung war
Einstellungen der Umgebung: Es werden
Umgebungsinformationen darüber erfaßt, wie der SQL-Compiler die Abfragen
optimierte. Zu den Umgebungsinformationen gehören die folgenden:
- Die Versions- und Release-Nummer für die verwendete Stufe von DB2
- Der Grad der zum Kompilieren der Abfrage verwendeten Parallelität.
Zur Festlegung des Grads der Parallelität beim Kompilieren einer bestimmten
Abfrage kann das Sonderregister CURRENT DEGREE, die Bindeoption DEGREE, die
API SET RUNTIME DEGREE und der Konfigurationsparameter
dft_degree verwendet werden.
- Die Angabe, ob es sich um eine dynamische oder statische SQL-Anweisung
handelt
- Die zum Kompilieren der Abfrage verwendete Optimierungsklasse.
Weitere Informationen finden Sie in Anpassen der Optimierungsklasse.
- Der Typ der Cursorblockung, der beim Kompilieren der Abfrage angegeben
wurde. Weitere Informationen zu Cursorn finden Sie im Handbuch SQL Reference. Weitere Informationen zur Cursorblockung finden Sie in Zeilenblockung.
- Die beim Kompilieren der Abfrage verwendete Isolationsstufe.
Weitere Informationen finden Sie in Gemeinsamer Zugriff.
- Die Werte verschiedener Konfigurationsparameter zum Zeitpunkt der
Kompilierung der Abfrage. Im Abschnitt Konfigurationsparameter mit Auswirkung auf die Abfrageoptimierung finden Sie weitere Informationen über die
Konfigurationsparameter, die Auswirkungen auf die Abfrageoptimierung haben
können, einschließlich der folgenden Parameter, die aufgezeichnet werden, wenn
eine EXPLAIN-Momentaufnahme erstellt wird:
Kennzeichnung von SQL-Anweisungen: Für jedes
EXPLAIN-Exemplar können mehrere SQL-Anweisungen mit EXPLAIN bearbeitet worden
sein. Anhand der folgenden Informationen zusammen mit Informationen,
die das EXPLAIN-Exemplar eindeutig kennzeichnen, kann jede einzelne
SQL-Anweisung identifiziert werden.
- Die Anweisungsart: SELECT, DELETE, INSERT, UPDATE, positioniertes
DELETE, positioniertes UPDATE.
- Die Anweisungs- und Abschnittsnummer des Pakets, das die SQL-Anweisung
absetzt, wie in der Katalogsicht SYSCAT.STATEMENTS gespeichert.
In der Tabelle EXPLAIN_STATEMENT enthalten die Felder QUERYTAG und QUERYNO
Kennungen, die im Rahmen des EXPLAIN-Prozesses für Sie mit Werten gefüllt
werden.
Für dynamische SQL-EXPLAIN-Anweisungen, die in einer Sitzung des
Befehlszeilenprozessors (CLP) oder einer Sitzung von Call Level Interface
(CLI) übergeben wurden, wird als Wert für QUERYTAG "CLP" bzw.
"CLI" gespeichert, wenn EXPLAIN MODE oder EXPLAIN SNAPSHOT aktiv
ist. Wenn dies der Fall ist, wird für QUERYNO standardmäßig eine Nummer
angegeben, die um eins oder mehr für jede Anweisung erhöht wird.
Für alle anderen dynamischen SQL-EXPLAIN-Anweisungen
(d. h. nicht über CLP, CLI bzw. mit Hilfe der
SQL-Anweisung EXPLAIN gefordert) wird das Feld QUERYTAG mit Leerzeichen und
das Feld QUERYNO immer mit dem Wert 1 gefüllt.
Schätzung des Aufwands: Für jede mit EXPLAIN bearbeitete
Anweisung wird ein Schätzwert des relativen Aufwands zur Ausführung des
ausgewählten Zugriffsplans aufgezeichnet. Dieser Schätzwert wird in
einer künstlichen relativen Maßeinheit, den Timerons,
angegeben. Schätzwerte für die benötigten Ausführungszeiten werden aus
folgenden Gründen nicht zur Verfügung gestellt:
- Das SQL-Optimierungsprogramm schätzt nicht die benötigte Zeit, sondern den
Ressourcenbedarf ab.
- Das Optimierungsprogramm modelliert nicht alle Faktoren nach, die die
benötigte Zeit beeinflussen können. Es werden die Faktoren ignoriert,
die keine Auswirkung auf die Effizienz des Zugriffsplans haben. Die
benötigte Zeit wird jedoch von einer Reihe Laufzeitfaktoren
beeinflußt, zu denen die folgenden gehören: die Systemauslastung, die
Ressourcenverfügbarkeit, der Umfang der Parallelverarbeitung und der
Ein-/Ausgabeoperationen, der Aufwand für die Rückgabe von Zeilen an den
Benutzer sowie die Übertragungszeit zwischen Client und Server.
Anweisungstext: Für jede mit EXPLAIN bearbeitete Anweisung
werden zwei Versionen des Texts der SQL-Anweisung aufgezeichnet. Eine
Version ist der Text, wie er vom SQL-Compiler empfangen wurde. Die
andere Version des Anweisungstexts ist eine Rückübersetzung aus der internen
Compilerdarstellung der Abfrage. Diese Rückübersetzung sieht zwar
anderen SQL-Anweisungen sehr ähnlich, folgt aber nicht unbedingt
der richtigen SQL-Syntax und spiegelt nicht in jedem Fall den tatsächlichen
Inhalt der internen Darstellung als Ganzes wider. Sie wird nur für das
Verständnis des SQL-Kontexts, in dem das Optimierungsprogramm den Zugriffsplan
auswählte, zur Verfügung gestellt. Der Vergleich des Textes der
benutzererstellten Anweisung mit der internen Darstellung der SQL-Anweisung
kann Ihnen dabei helfen, zu verstehen, wie der SQL-Compiler Ihre Abfrage zur
Optimierung umgeschrieben hat. (Siehe Umschreiben der Abfrage durch den SQL-Compiler.) Der Anweisungstext zeigt Ihnen auch, welche anderen
Elemente Ihrer Umgebung, z. B. Auslöser (Trigger) und
Integritätsbedingungen, Auswirkungen auf Ihre Anweisung haben. Einige
Schlüsselwörter, die in diesem "optimierten" Text verwendet werden,
sind:
- $Cn
- Der Name der abgeleiteten Spalte, wobei n ein ganzzahliger Wert
ist.
- $CONSTRAINT$
- Dieses Kennzeichen markiert den Namen einer Integritätsbedingung, die der
ursprünglichen SQL-Anweisung bei der Kompilierung hinzugefügt wurde. Es
ist in Kombination mit dem Präfix $WITH_CONTEXT$ zu sehen.
- $DERIVED.Tn
- Der Name einer abgeleiteten Tabelle, wobei n ein ganzzahliger Wert
ist.
- $INTERNAL_FUNC$
- Dieses Kennzeichen markiert das Vorhandensein einer Funktion, die vom
SQL-Compiler für die mit EXPLAIN bearbeitete Abfrage verwendet wurde, jedoch
nicht zur allgemeinen Verwendung verfügbar ist.
- $INTERNAL_PRED$
- Dieses Kennzeichen markiert das Vorhandensein eines Vergleichselements,
das vom SQL-Compiler bei der Kompilierung der mit EXPLAIN bearbeiteten Abfrage
hinzugefügt wurde. Auch ein solches Vergleichselement ist nicht zur
allgemeinen Verwendung verfügbar. Vom Compiler wird ein internes
Vergleichselement verwendet, um den als Ergebnis von Auslösern und
Integritätsbedingungen der ursprünglichen SQL-Anweisung hinzugefügten
Bedingungskontext zu erfüllen.
- $RID$
- Dieses Kennzeichen dient zur Identifizierung der Spalte der Satz-ID (RID)
für eine bestimmte Zeile.
- $TRIGGER$
- Dieses Kennzeichen markiert den Namen eines Auslösers, der der
ursprünglichen SQL-Anweisung bei der Kompilierung hinzugefügt wurde. Es
ist in Kombination mit dem Präfix $WITH_CONTEXT$ zu sehen.
- $WITH_CONTEXT$(...)
- Dieses Präfix tritt am Anfang des Texts auf, wenn zusätzliche Auslöser
oder Integritätsbedingungen in die ursprüngliche SQL-Anweisung eingefügt
wurden. Diesem Präfix folgt eine Liste der Namen aller Auslöser oder
Integritätsbedingungen, die sich auf die Kompilierung und Auflösung der
SQL-Anweisung auswirken.
Wenn eine Momentaufnahme (Snapshot) angefordert wird, werden zusätzliche
EXPLAIN-Informationen aufgezeichnet, die den Zugriffsplan beschreiben, der vom
SQL-Optimierungsprogramm ausgewählt wurde. Diese Informationen werden
in der Spalte SHAPSHOT der Tabelle EXPLAIN_STATEMENT im für Visual Explain
erforderlichen Format gespeichert. Dieses Format kann von anderen
Anwendungen nicht verwendet werden.
Weitere Informationen zum Inhalt der Informationen der
EXPLAIN-Momentaufnahmen erhalten Sie direkt mit Hilfe von Visual Explain sowie
in folgenden Abschnitten:
Wenn EXPLAIN-Tabelleninformationen angefordert werden, werden zusätzliche
Informationen aufgezeichnet, die den vom SQL-Optimierungsprogramm ausgewählten
Zugriffsplan beschreiben. Diese Informationen werden in den folgenden
EXPLAIN-Tabellen gespeichert:
- EXPLAIN_ARGUMENT. Diese Tabelle enthält die spezifischen Merkmale
für jeden einzelnen Operator (sofern vorhanden).
- EXPLAIN_INSTANCE. Diese Tabelle ist die Hauptsteuertabelle für alle
EXPLAIN-Informationen. Jede Datenzeile in den EXPLAIN-Tabellen ist
explizit mit einer eindeutigen Zeile in dieser Tabelle verbunden. In
dieser Tabelle werden grundlegende Informationen über die Quelle der
SQL-Anweisungen, die mit EXPLAIN bearbeitet werden, und Umgebungsinformationen
gespeichert.
- EXPLAIN_OBJECT. Diese Tabelle identifiziert die Datenobjekte, die
für den Zugriffsplan, der zur Erfüllung der SQL-Anweisung generiert wurde,
erforderlich sind.
- EXPLAIN_OPERATOR. Diese Tabelle enthält alle Operatoren, die zur
Erfüllung der SQL-Anweisung durch den SQL-Compiler benötigt werden.
- EXPLAIN_PREDICATE. Diese Tabelle enthält Informationen darüber,
welche Vergleichselemente von einem bestimmten Operator angewandt
werden.
- EXPLAIN_STATEMENT. Diese Tabelle enthält den Text der
SQL-Anweisung, wie sie für die verschiedenen Stufen der EXPLAIN-Informationen
existiert. Die ursprüngliche SQL-Anweisung, wie sie vom Benutzer
eingegeben wurde, wird in dieser Tabelle zusammen mit der (vom
Optimierungsprogramm) zum Auswählen eines Zugriffsplans für die Ausführung der
SQL-Anweisung verwendeten Version gespeichert.
- EXPLAIN_STREAM. Diese Tabelle stellt die Eingabe- und
Ausgabedatenströme zwischen einzelnen Operatoren und Datenobjekten dar.
Die Datenobjekte selbst werden in der Tabelle EXPLAIN_OBJECT
dargestellt. Die an einem Datenstrom beteiligten Operatoren werden in
der Tabelle EXPLAIN_OPERATOR dargestellt.
- ADVISE_WORKLOAD. Diese Tabelle ermöglicht Benutzern, die durch Ihre
Arbeit entstehende Auslastung für die Datenbank zu beschreiben. Jede
Zeile in dieser Auslastungstabelle stellt eine SQL-Anweisung dar und wird
durch eine zugeordnete Häufigkeit beschrieben. Diese Tabelle wird vom
Programm db2advis und vom Assistent: Index
verwendet, um Auslastungsinformationen aufzunehmen und zu
speichern.
- ADVISE_INDEX. In dieser Tabelle werden Informationen über
empfohlene Indizes gespeichert. Die Tabelle wird durch den
SQL-Compiler, das Dienstprogramm db2advis, den
Assistent: Index oder einen Benutzer mit Werten
gefüllt. Diese Tabelle wird zu zwei Zwecken verwendet:
- Zum Abrufen empfohlener Indizes.
- Zum Auswerten von Indizes auf der Grundlage von Eingaben zu
vorgeschlagenen Indizes.
Die oben genannten Tabellen werden nicht standardmäßig erstellt. Sie
können durch Ausführen der Prozedur EXPLAIN.DDL erstellt werden, die
sich im Unterverzeichnis misc des Unterverzeichnisses
sqllib befindet. Stellen Sie die Verbindung (Connect) zu der
Datenbank her, in der die EXPLAIN- und ADVISE-Tabellen benötigt werden.
Geben Sie dann den Befehl db2 -tf EXPLAIN.DDL ein, um die
Tabellen zu erstellen. Die Tabellen könnten ebenso bei Bedarf
automatisch durch den Assistent: Index erstellt
werden.
Jeder von Visual Explain rechteckig dargestellte Objektknoten
entspricht einer Zeile in der Tabelle EXPLAIN_OBJECT. Jeder von Visual
Explain achteckig dargestellte "Operatorknoten" entspricht einer Zeile in
der Tabelle EXPLAIN_OPERATOR. Jede Verbindung zwischen Operatoren
bzw. Operatorobjekten entspricht einer Zeile in der Tabelle
EXPLAIN_STREAM.
Die EXPLAIN-Tabelleninformationen ähneln inhaltlich den Informationen, die
für eine EXPLAIN-Momentaufnahme aufgezeichnet werden, jedoch werden diese
Informationen in regulären relationalen Tabellen gespeichert, was den Zugriff
mit Hilfe von SQL-Standardanweisungen ermöglicht.
Wie auch das Zugriffsplandiagramm von Visual Explain sind EXPLAIN-Tabellen
dazu gedacht, die Beziehungen zwischen Operatoren und Datenobjekten innerhalb
des Zugriffsplans darzustellen. Die folgende Abbildung zeigt die
Beziehungen zwischen diesen Tabellen.
Abbildung 87. Beziehungen zwischen den EXPLAIN-Tabellen (nicht alle Tabellen gezeigt)

Es ist möglich, EXPLAIN-Tabellen zu haben, die zu mehr als einem Benutzer
gehören. Die EXPLAIN-Tabellen können für einen Benutzer definiert
werden. In diesem Fall können Aliasnamen mit Hilfe desselben Namens für
jeden weiteren Benutzer definiert werden, die auf die definierten Tabellen
verweisen. Jeder Benutzer, der auf die gemeinsamen EXPLAIN-Tabellen
zugreift, muß das Zugriffsrecht INSERT zum Einfügen für diese Tabellen
haben.
In Anhang H, EXPLAIN-Programme (SQL) finden Sie weitere Informationen zu den EXPLAIN-Tabellen und
zu ihrer Erstellung. Weitere Informationen zum Inhalt der
EXPLAIN-Tabelleninformationen finden Sie in folgenden Abschnitten:
Das Tool db2exfmt, das im Unterverzeichnis misc des
Verzeichnisses sqllib zur Verfügung steht, kann zur Formatierung
des Inhalts der EXPLAIN-Tabellen in eine lesbare, strukturierte Ausgabe
verwendet werden.
[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]