Beispielanalyse einer Informix-Anweisung
Sie können die SQL-Trace-Funktion dazu nutzen, Erklärungen zu bestimmten Informix-Anweisungen anzuzeigen. Aus der Anzeige eines Tracefiles heraus können Sie die Funktion Explain SQL nutzen, um mehr Informationen zu einer bestimmten Datenbankanweisung anzuzeigen. Die Explain-Funktion steht nur für PREPARE- und REOPEN-Operationen zur Verfügung. So analysieren Sie eine Anweisung:
Das Explain-Bild zeigt die Datenbankstrategie für die gewählte Operation.
Wenn Sie mit einer INFORMIX-Datenbank arbeiten, können Sie z.B. die Analyse für die folgende Anweisung anzeigen:
select owner from systables where tabname = ‘atab’
Das System zeigt folgendes an:
Execution plan of a select statement (Online Optimizer)
QUERY:
SELECT OWNER
FROM SYSTABLES
WHERE TABNAME = ‘ ATAB’
Estimated Cost: 1
Estimated # of Rows Returned: 1
1) informix.systables: INDEX PATH
(1) Index Keys: tabname owner (Key-Only)
Lower Index Filter: informix.systables.tabname = ‘ ATAB’
Die Felder in der Anzeige haben folgende Bedeutung:
QUERY |
Identifiziert die SQL-Anweisung, die analysiert wurde. |
Estimated Cost |
Schätzt die Datenbankzeit, die zur Ausführung der Anweisung benötigt wurde. Der kostenbasierende Optimizer schätzt diesen Wert anhand der I/O- und CPU-Zeiten, die zur Ausführung der Anweisung benötigt wurden. Je größer Estimated Cost, desto teurer die Anweisung. |
Estimated # of Rows Returned: |
Schätzt die Anzahl der Tabellenzeilen, die die SQL-Anweisung zurückliefern wird. |
Unmittelbar unter der Anzahl zurückgelieferter Zeilen folgt der gewählte Ausführungsplan. Im obigen Beispiel sieht dieser Plan so aus:
1) informix.systables: INDEX PATH
Die
1) gibt an, daß das System die Tabelle systables als ersten Schritt des Plans ausführt. Bei Analysen, die mehrere Tabellen umfassen (Views und Joins), gibt die Nummernfolge die Reihenfolge an, in der das System die Tabellen verarbeitet. Im vorliegenden Beispiel ist nur ein einziger Schritt erfolderlich.Der Ausführungsplan gibt die Art des Tabellenzugriffs an. Im obigen Beispiel erfolgte der Zugriff über
INDEX PATH . Auf die erforderlichen Daten wird nun über den Index der Tabelle systables zugegriffen. Normalerweise verwendet der Ausführungsplan den Primärschlüssel als Index. Jede transparente Tabelle im ABAP-Dictionary hat einen Primärschlüssel, für den das System automatisch einen Index erstellt.
Wenn das System einen großen Teil einer Tabelle lesen muß, verwendet es nicht den Primärschlüssel als Index.
In diesem Beispiel mußte das System die Zeile, die dem Indexschlüssel entspricht, nicht lesen. Die benötigte Information war bereits in Schlüssel selbst vorhanden. In der Analyse wird dies durch
Key-Only deutlich:(1) Index Keys: tabname owner (Key-Only)
Falls eine SELECT-Anweisung ohne vollqualifizierten Schlüssel angegeben wird, kann es sein, daß die Datenbank die relevanten Zeilen mit einem FULL TABLE SCAN lesen muß. In diesem Fall enthält die SQL-Explain-Ausgabe keinen Index, sondern eine Anzeige ähnlich der folgenden:
1) informix.systables: SEQUENTIAL SCAN
Dies gibt an, daß die gesamte Tabelle gelesen werden muß (FULL TABLE SCAN).
Bei komplexeren Operationen, die die Kombination der Ergebnisse mehrerer SELECT-Anweisungen auf unterschiedliche Tabellen erfordern, werden weitere Strategien angezeigt (z.B. MERGE JOIN, DYNAMIC HASH JOIN). Diese Anzeigen beziehen sich auf die vom Optimizer gewählten Join-Strategien.
Aktualität sicherstellen
Der Optimizer kann nur dann exakte Werte für jedes Analysefeld liefern, wenn die statistischen Informationen zu jeder Tabelle aktuell sind. Um exakte Analysewerte zu erhalten, müssen Sie daher sicherstellen, daß die aktuellsten statistischen Informationen zum Inhalt jeder angesprochenen Tabelle verfügbar sind.
Um diese Informationen zu aktualisieren, verwenden Sie die Funktion Update Statistics. Da der vom Optimizer gewählte Ausführungsplan stark von diesen Informationen abhängt (z.B. die Verwendung des FULL TABLE SCAN anstelle eines Index), sollten Sie die Aktualität durch regelmäßiges Ausführen der Funktion Update Statistics sicherstellen.