DB2 Universal Database - Systemverwaltung


Organisation von EXPLAIN-Informationen

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:

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

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:

Einstellungen der Umgebung: Es werden Umgebungsinformationen darüber erfaßt, wie der SQL-Compiler die Abfragen optimierte. Zu den Umgebungsinformationen gehören die folgenden:

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.

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:

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.

Informationen der EXPLAIN-Momentaufnahmen

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:

Informationen der EXPLAIN-Tabellen

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:

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)

sqld0trl

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 ]