Sie haben die Möglichkeit, detailliertere Statistikdaten für Indizes zu erfassen, die dem Optimierungsprogramm zu einer besseren Abschätzung des Aufwands für den Zugriff auf eine Tabelle über diesen Index verhelfen. Dazu gibt es zwei Methoden: zum einen können Sie die Klausel DETAILED im Befehl RUNSTATS verwenden, zum anderen können Sie A, Y oder X für den Parameter statsopt beim Aufrufen der API RUNSTATS angeben. Die DETAILED-Statistikdaten für PAGE_FETCH_PAIRS und CLUSTERFACTOR werden nur erfaßt, wenn die Tabelle eine ausreichende Größe hat (ca. 25 Seiten). In diesem Fall hat CLUSTERFACTOR einen Wert zwischen 0 und 1, während CLUSTERRATIO den Wert -1 (nicht erfaßt) hat. Für Tabellen, die kleiner als 25 Seiten sind, hat CLUSTERFACTOR den Wert -1 (nicht erfaßt) und CLUSTERRATIO einen Wert zwischen 0 und 100, auch wenn die Klausel DETAILED für einen Index für diese Tabelle angegeben ist.
Mit Hilfe der Klausel DETAILED soll in komprimierter Form die Anzahl der physischen E/A-Operationen erfaßt werden, die für den Zugriff auf die Datenseiten einer Tabelle erforderlich werden, wenn eine vollständige Indexsuche bei verschiedenen Puffergrößen ausgeführt wird. Das Dienstprogramm RUNSTATS sucht die Seiten des Index ab und modelliert dabei die verschiedenen Puffergrößen und sammelt Schätzwerte darüber, wie häufig eine Fehlseitenbedingung auftritt. Wenn beispielsweise nur 1 (eine) Pufferseite verfügbar ist, führt jeder neue Verweis des Index auf eine Seite zu einer Fehlseitenbedingung. Schlimmstenfalls kann jede Zeile des Index auf eine andere Seite verweisen, was maximal eine Anzahl von CARD (Kardinalität der Tabelle) an E/A-Operationen verursachen kann. Das andere Extrem wäre der Fall, wenn der Puffer groß genug wäre, um die gesamte Tabelle (abhängig von der maximalen Puffergröße) aufzunehmen. In diesem Fall werden die Seiten der Tabelle (NPAGES) genau einmal physisch gelesen. Die Anzahl der physischen E/A-Operationen muß infolgedessen eine monotone, nicht steigende Funktion der Puffergröße sein.
Das Dienstprogramm RUNSTATS erstellt eine stückweise an diese Schätzwerte angelehnte lineare Kurve, die als Zeichenfolge von 11 Wertepaaren in der PAGE_FETCH_PAIRS-Statistik gespeichert wird. Der erste Wert in jedem Paar stellt eine hypothetische Puffergröße dar, während der zweite Wert jedes Paares die geschätzte Anzahl der physischen E/A-Operationen zum Abrufen der Datenseiten bei einem vollständigen Durchsuchen des Index unter voller Verfügbarkeit der zugehörigen Puffergröße für diese Indexsuche enthält. Das Optimierungsprogramm verwendet die PAGE_FETCH_PAIRS-Statistik, um die Anzahl der physischen E/A-Operationen für Abrufe von Datenseiten in jeder vollständigen oder partiellen Indexsuche in diesem Index abzuschätzen.
Die Form der Kurve, die in PAGE_FETCH_PAIRS für einen Index gespeichert wird, hängt von der Art der Clusterbildung dieses Index ab.
Abbildung 77. Drei Kurven für Indizes mit und ohne Clusterbildung
Es gibt drei Arten möglicher Kurven:
Die detaillierten Indexstatistiken (Klausel DETAILED) sollten verwendet werden, wenn Ihre Abfragen auf Spalten zugreifen, die nicht alle im Index sind. Darüber hinaus sollten detaillierte Indexdaten in folgenden Fällen verwendet werden:
Unter Umständen ist es nicht einfach, diese Fälle zu identifizieren, ohne im Besitz bestimmter Vorkenntnisse zu sein und ohne zu versuchen, eine Indexsuche bei verschiedenen Puffergrößen zu erzwingen und mit Hilfe des Monitors die sich ergebenden physischen E/A-Operationen zu überwachen. Die Methode des geringsten Aufwands zur Feststellung, ob eine dieser Situationen auftritt, ist, die DETAILED-Statistikdaten für einen Index zu erfassen und sie zu behalten, wenn die resultierenden Wertepaare für PAGE_FETCH_PAIRS einen nichtlinearen Verlauf zeigen.