DB2 Universal Database - Systemverwaltung


Erfassen statistischer Daten mit dem Dienstprogramm RUNSTATS

Mit dem Dienstprogramm RUNSTATS werden die Systemkatalogtabellen aktualisiert, um den Prozeß zur Optimierung der Abfragen zu unterstützen. Ohne diese Statistiken könnte der Datenbankmanager für die Leistung von SQL-Anweisungen nachteilige Entscheidungen treffen. Das Dienstprogramm RUNSTATS ermöglicht es, statistische Daten über die in den Tabellen und/oder Indizes enthaltenen Daten zu erfassen.

Das Dienstprogramm RUNSTATS dient zur Erfassung statistischer Daten sowohl über die Tabellendaten als auch über die Indexdaten, um genaue Informationen für den Auswahlprozeß des Zugriffsplans in folgenden Situationen bereitzustellen:

In einer partitionierten Datenbank erfassen Sie die zu einer Tabelle und den entsprechenden Indizes gehörenden Statistikdaten, indem Sie das Dienstprogramm RUNSTATS auf einem einzigen Knoten ausführen. (Der Knoten, auf dem das Dienstprogramm ausgeführt wird, wird dadurch bestimmt, ob der Knoten, auf dem Sie den Befehl eingeben, Tabellendaten enthält oder nicht. Einzelheiten hierzu finden Sie in Die Datenbankpartition, auf der RUNSTATS ausgeführt wird.) Da die in den Katalogen gespeicherten Statistikdaten Informationen auf Tabellenebene darstellen sollen, werden die auf Knotenebene vom Datenbankmanager gesammelten Statistikdaten gegebenenfalls mit der Anzahl der Knoten multipliziert, auf die die Tabelle partitioniert ist. Dieses Verfahren liefert einen Näherungswert für die tatsächlichen Statistikdaten, die erfaßt würden, wenn RUNSTATS auf jedem Knoten ausgeführt und die Daten zu einem Gesamtergebnis aufsummiert würden.
Anmerkung:Das DB2-Abfrageoptimierungsprogramm nimmt an, daß die Attributwerte (Daten) gleichmäßig über die Datenbankpartitionen des Systems verteilt sind. Wenn die Verteilung nicht gleichmäßig ist, sollten Sie diesen Befehl in einer Datenbankpartition ausführen, die sich nach Ihrer Meinung durch eine repräsentative Tabellenverteilung auszeichnet.

Die Datenbankpartition, auf der RUNSTATS ausgeführt wird

Wenn Sie das Dienstprogramm RUNSTATS für eine Tabelle aufrufen, müssen Sie mit der Datenbank verbunden sein, in der die Tabelle gespeichert ist, jedoch muß die Datenbankpartition, von der aus Sie diesen Befehl ausführen, nicht unbedingt eine Partition für diese Tabelle enthalten:

Analysieren der Statistikdaten

Die Analyse der Statistiken kann aufzeigen, wann eine Reorganisation der Daten erforderlich ist. Einige Anhaltspunkte dafür sind:

Mit dem Dienstprogramm RUNSTATS können Sie auch feststellen, wie sich Änderungen in der Datenbank auf die Leistung auswirken. Die statistischen Daten zeigen die Datenverteilung innerhalb einer Tabelle. Wenn das Dienstprogramm RUNSTATS routinemäßig ausgeführt wird, können Daten zu Tabellen und Indizes über einen Zeitraum hinweg erhoben werden, anhand derer sich im Lauf der Entwicklung des Datenmodells Leistungstrends ablesen lassen.

Im Idealfall sollten Anwendungsprogramme nach der Ausführung von RUNSTATS erneut gebunden werden, damit das Abfrageoptimierungsprogramm einen anderen Zugriffsplan aufgrund der neuen Statistik auswählen kann.

Wenn Sie nicht über genügend Zeit verfügen, alle Statistiken auf einmal zu sammeln, können Sie RUNSTATS auch in regelmäßigen Abständen ausführen und jeweils nur einen Teil der Statistikdaten aktualisieren, die erfaßt werden könnten. Wenn aufgrund der Aktivitäten an den Tabellen zwischen den Zeitpunkten, zu denen Sie RUNSTATS zu einer Teilaktualisierung ausführen, Inkonsistenzen festgestellt werden, wird eine Warnung (SQL0437W, Ursachencode 6) ausgegeben. Sie verwenden zum Beispiel RUNSTATS zunächst, um Statistikdaten zur Tabellenverteilung zu sammeln. Später führen Sie RUNSTATS aus, um Indexstatistikdaten zu erfassen. Wenn Inkonsistenzen wegen der Aktivitäten an der Tabelle festgestellt werden, werden die Statistikdaten zur Tabellenverteilung gelöscht und die Warnung ausgegeben. Wenn dies geschieht, ist es ratsam, RUNSTATS zur Erfassung von Statistikdaten zur Tabellenverteilung ausführen.

RUNSTATS sollte von Zeit zu Zeit zur gleichzeitigen Erfassung von Tabellenstatistikdaten und Indexstatistikdaten ausgeführt werden, um sicherzustellen, daß die Indexstatistikdaten mit den Tabellenstatistikdaten synchronisiert sind. Indexstatistikdaten behalten die Mehrheit der bei der letzten Ausführung von RUNSTATS gesammelten Tabellen- und Spaltenstatistikdaten bei. Wenn seit der letzten Erfassung von Tabellenstatistikdaten umfangreiche Änderungen an der Tabelle vorgenommen wurden, geht durch die Erfassung nur der Indexstatistikdaten für diese Tabelle die Synchronisierung der beiden Arten von Statistikdaten verloren.

In folgenden Situationen kann es sinnvoll sein, statistische Daten nur für Indexdaten zu sammeln:

Mit dem Dienstprogramm RUNSTATS können unterschiedliche Ebenen statistischer Daten gesammelt werden. Für Tabellen können statistische Basisdaten oder auch Verteilungsdaten über die Spaltenwerte innerhalb einer Tabelle gesammelt werden (siehe Erfassen und Verwenden von Verteilungsstatistiken). Für Indizes können statistische Basisdaten oder auch Detaildaten gesammelt werden, die das Optimierungsprogramm bei der Ermittlung des Ein-/Ausgabeaufwands für eine Indexsuche unterstützen. (Informationen über diese "Detailstatistik" finden Sie in Geclusterte Indizes).
Anmerkung:Für Spalten mit den Datentypen LONG oder LOB (großes Objekt) bzw. strukturierte Spalten werden keine statistischen Daten gesammelt. Bei Zeilentypen werden die statistischen Daten auf Tabellenebene für NPAGES, FPAGES und OVERFLOW für eine untergeordnete Tabelle nicht erhoben. Für erweiterte Indizes oder deklarierte temporäre Tabellen werden keine statistischen Daten gesammelt.

Die folgenden Tabellen zeigen die Katalogstatistiken, die vom Dienstprogramm RUNSTATS aktualisiert werden:


Tabelle 44. Tabellenstatistiken (SYSCAT.TABLES und SYSSTAT.TABLES)
Statistik Beschreibung RUNSTATS-Option
Tabelle Indizes
FPAGES Anzahl der von einer Tabelle verwendeten Seiten Ja Ja
NPAGES Anzahl der Zeilen enthaltenden Seiten Ja Ja
OVERFLOW Anzahl der Überlaufzeilen Ja Nein
CARD Anzahl der Zeilen in der Tabelle (Kardinalität) Ja Ja (Anm. 2)
Anmerkung:

  1. In einer partitionierten Datenbank werden Schätzwerte für jede Statistik aus dem Produkt des Werts der Zählung in der Datenbankpartition multipliziert mit der Anzahl der Datenbankpartitionen gebildet.
  2. Wenn für die Tabelle keine Indizes erstellt wurden und Sie die Indexstatistik anfordern, wird die CARD-Statistik mit keinem neuen Wert aktualisiert. Die vorige CARD-Statistik wird beibehalten.

Tabelle 45. Spaltenstatistiken (SYSCAT.COLUMNS und SYSSTAT.COLUMNS)
Statistik Beschreibung RUNSTATS-Option
Tabelle Indizes
COLCARD Anzahl der unterschiedlichen Werte der Spalte (Spaltenkardinalität) Ja (Anm. 1) Ja (Anm. 2)
AVGCOLLEN Durchschnittslänge der Spalte Ja Ja (Anm. 2)
HIGH2KEY Zweithöchster Wert der Spalte Ja Ja (Anm. 2)
LOW2KEY Zweitniedrigster Wert der Spalte Ja Ja (Anm. 2)
NUMNULLS Die Anzahl NULLs in einer Spalte Ja Ja (Anm. 2)
Anmerkung:

  1. COLCARD wird für alle Spalten der Tabelle geschätzt. Wenn in einer partitionierten Datenbank die Spalte ein einspaltiger Partitionierungsschlüssel für die Tabelle ist, wird der Wert als das Produkt aus dem Wert in der Datenbankpartition multipliziert mit der Anzahl der Datenbankpartitionen geschätzt.
  2. Spaltenstatistiken werden für die erste Spalte im Indexschlüssel gesammelt.

Tabelle 46. Indexstatistiken (SYSCAT.INDEXES und SYSSTAT.INDEXES)
Statistik Beschreibung RUNSTATS-Option
Tabelle Indizes
NLEAF Anzahl der Indexblattseiten (leaf pages) Nein Ja (Anm. 3)
NLEVELS Anzahl der Indexstufen Nein Ja
CLUSTERRATIO Grad der Clusterbildung der Tabellendaten Nein Ja (Anm. 2)
CLUSTERFACTOR Feinerer Grad der Clusterbildung Nein Detailliert (Anm. 1,2)
DENSITY Verhältnis (Prozentsatz) von SEQUENTIAL_PAGES zur Anzahl der Seiten im Bereich der vom Index belegten Seiten (Anm. 4) Nein Ja
FIRSTKEYCARD Anzahl der unterschiedlichen Werte in der ersten Spalte des Index Nein Ja (Anm. 3)
FIRST2KEYCARD Anzahl der unterschiedlichen Werte in den ersten beiden Spalten des Index Nein Ja (Anm. 3)
FIRST3KEYCARD Anzahl der unterschiedlichen Werte in den ersten drei Spalten des Index Nein Ja (Anm. 3)
FIRST4KEYCARD Anzahl der unterschiedlichen Werte in den ersten vier Spalten des Index Nein Ja (Anm. 3)
FULLKEYCARD Anzahl der unterschiedlichen Werte in allen Spalten des Index Nein Ja (Anm. 3)
PAGE_FETCH_PAIRS Geschätzte Anzahl der Seitenabrufe für verschiedene Puffergrößen Nein Detailliert (Anm. 1,2)
SEQUENTIAL_PAGES Anzahl der Blattseiten (äußersten Seiten), die auf der Platte in der durch den Indexschlüssel definierten Reihenfolge mit wenigen oder keinen großen zwischenliegenden Lücken gespeichert sind Nein Ja
Anmerkung:

  1. Detaillierte Indexstatistikdaten werden gesammelt, indem die Klausel DETAILED im Befehl RUNSTATS oder beim Aufruf der API RUNSTATS für den Parameter statsopt die Werte A, Y oder X angegeben werden.
  2. CLUSTER_FACTOR und PAGE_FETCH_PAIRS werden mit der Klausel DETAILED nicht gesammelt, sofern die Tabelle nicht von besonderer Größe ist. Wenn die Tabelle größer als ca. 25 Seiten ist, werden die Statistikdaten für die Spalten CLUSTERFACTOR und PAGE_FETCH_PAIRS gesammelt. In diesem Fall ist CLUSTERRATIO (Clusterverhältnis) -1 (d. h. wird nicht gesammelt). Wenn die Tabelle relativ klein ist, wird nur die Spalte CLUSTERRATIO vom Dienstprogramm RUNSTATS ausgefüllt, während die Spalten CLUSTERFACTOR und PAGE_FETCH_PAIRS nicht berechnet werden. Wenn die Klausel DETAILED nicht angegeben wird, werden nur die Statistikdaten für CLUSTERRATIO gesammelt.
  3. In einer partitionierten Datenbank wird der Wert als Produkt des Werts in der Datenbankpartition multipliziert mit der Anzahl der Datenbankpartitionen geschätzt.
  4. Diese Statistik ermittelt den Prozentsatz von Seiten in der Datei, die den Index enthalten, der zu dieser Tabelle gehört. Für eine Tabelle, die nur einen definierten Index hat, sollte DENSITY normalerweise gleich 100 sein. DENSITY wird vom Optimierungsprogramm dazu verwendet, zu schätzen, wie viele irrelevante Seiten von anderen Indizes durchschnittlich vielleicht gelesen werden, wenn die Indexseiten vorabgelesen würden.

Tabelle 47. Spaltenverteilungsstatistiken (SYSCAT.COLDIST und SYSSTAT.COLDIST)
Statistik Beschreibung RUNSTATS-Option
Tabelle Indizes
DISTCOUNT Wenn TYPE den Wert Q hat, die Anzahl unterschiedlicher Werte, die kleiner oder gleich dem Statistikwert COLVALUE sind. Verteilung (Anm. 2) Nein
TYPE Gibt an, ob die Zeile statistische Daten über die Häufigkeit der Werte oder über Quantilwerte enthält Verteilung Nein
SEQNO Die Stelle in der Häufigkeitsrangfolge einer Folgenummer, die als Hilfe zur eindeutigen Bestimmung der Zeile in der Tabelle verwendet werden kann Verteilung Nein
COLVALUE Datenwert, für den Statistikdaten zur Häufigkeit oder zu Quantilwerten gesammelt werden Verteilung Nein
VALCOUNT Häufigkeit, mit der der Datenwert in der Spalte auftritt, oder bei Quantilwerten die Anzahl der Werte, die kleiner oder gleich dem Datenwert (COLVALUE) sind Verteilung Nein
Anmerkung:

  1. Verteilungsstatistikdaten über Spalten werden gesammelt, indem die Klausel WITH DISTRIBUTION im Befehl RUNSTATS oder beim Aufruf der API RUNSTATS für den Parameter statsopt die Werte A, D oder Y angegeben werden. Beachten Sie, daß Verteilungsstatistikdaten nicht gesammelt werden, wenn das Ausmaß der Ungleichmäßigkeit der Werteverteilung in den Spaltenwerten nicht hoch genug ist.
  2. DISTCOUNT wird nur für Spalten gesammelt, die die erste Schlüsselspalte in einem Index bilden.
  3. In einer partitionierten Datenbank wird der Wert für VALCOUNT als Produkt aus der Anzahl in der Datenbankpartition multipliziert mit der Anzahl der Datenbankpartitionen geschätzt. Hiervon ausgenommen ist der Fall, daß TYPE den Wert 'F' hat und die Spalte den einspaltigen Partitionierungsschlüssel der Tabelle bildet. In diesem Fall ist VALCOUNT einfach der in die Datenbankpartition ermittelte Anzahl.

Weitere Informationen über Verteilungsstatistiken zu Spalten lesen Sie im Abschnitt Erfassen und Verwenden von Verteilungsstatistiken.

Statistische Daten für benutzerdefinierte Funktionen werden vom Dienstprogramm RUNSTATS nicht erfaßt. Für diese Funktionen müssen die Statistiken manuell aktualisiert werden. Lesen Sie dazu die Abschnitte Benutzeraktualisierbare Katalogstatistiken und Aktualisieren der Statistiken für benutzerdefinierte Funktionen.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]