Die Leistung von SQL-Anweisungen, die Indizes verwenden, kann beeinträchtigt werden, nachdem zahlreiche Daten aktualisiert, gelöscht oder eingefügt wurden. Im allgemeinen können neu eingefügte Zeilen nicht in der gleichen physischen Reihenfolge angeordnet werden wie die logische Reihenfolge, die durch den Index definiert ist (es sei denn, Sie verwenden geclusterte Indizes). Das heißt, daß der Datenbankmanager zusätzliche Leseoperationen zum Zugriff auf die Daten durchführen muß, da sich logisch sequentielle Daten auf verschiedenen physischen Datenseiten befinden können, die nicht sequentiell sind.
In der Regel nimmt die Reorganisation einer Tabelle mehr Zeit in Anspruch als die Ausführung des Dienstprogramms RUNSTATS zur Erhebung der Statistiken. Die Leistung kann vielleicht schon ausreichend verbessert werden, wenn aktuelle Statistiken für die enthaltenen Daten erstellt und die Anwendungen erneut gebunden werden. Daher sollte dies zuerst versucht werden. Wenn sich dadurch keine Leistungsverbesserung ergibt, sind die Daten in den Tabellen und Indizes wahrscheinlich nicht effizient angeordnet, so daß eine Reorganisation Abhilfe schaffen könnte. Die Informationen dieses Abschnitts beziehen sich nicht nur auf die Reorganisation Ihrer eigenen Datentabellen, sondern auch auf die Reorganisation der Systemkatalogtabellen, für die diese Maßnahme ebenfalls erforderlich werden kann.
Bei typisierten Tabellen muß der angegebene Tabellenname der Name der Stammtabelle der Hierarchie sein.
Der Befehl REORGCHK liefert Informationen über die physischen Merkmale einer Tabelle und gibt Anhaltspunkte, ob eine Reorganisation der Tabelle vorteilhaft wäre. Dieser Befehl kann über den Befehlszeilenprozessor ausgeführt werden. Im Handbuch Command Reference finden Sie weitere Informationen, einschließlich Hinweisen, wie die Ausgabe des Befehls zu interpretieren ist.
Anmerkung: | Der Befehl REORGCHK zeigt keine Daten für erweiterte Indizes oder deklarierte temporäre Tabellen. |
Das Dienstprogramm REORG ordnet wahlweise Daten anhand eines angegebenen Index in einer physischen Reihenfolge neu an. REORG verfügt über eine Option, mit der die Reihenfolge von Zeilen in einer Tabelle mit Hilfe eines Index angegeben werden kann. Dadurch werden die Tabellendaten gemäß dem Index in Clustern angeordnet, so daß sich für die statistischen Daten der Spalte CLUSTERRATIO (Clusterverhältnis) bzw. CLUSTERFACTOR (Clusterfaktor), die vom Dienstprogramm RUNSTATS gesammelt werden, bessere Werte ergeben. Infolgedessen können SQL-Anweisungen, die Zeilen in der Reihenfolge des Index anfordern, effektiver verarbeitet werden. Durch das Dienstprogramm REORG werden die Tabellen außerdem kompakter gespeichert, indem nicht benötigter, leerer Speicherbereich wieder freigegeben wird (wenn Sie PCTFREE in ALTER TABLE angegeben haben, bleibt dieser Speicherbereich jedoch ungenutzt).
Verwenden Sie die Befehle REORG und REORGCHK nicht mit Kurznamen.
Das Dienstprogramm REORG setzt voraus, daß alle anderen Anwendungen, die normalerweise mit den betroffenen Tabellendaten und Indizes arbeiten, offline sind. Vielleicht ist es in Ihrer Arbeitsumgebung wünschenswert, den Zeitraum, den die Anwendungen nicht mit den Daten arbeiten können, möglichst begrenzt zu halten. In diesem Fall kann die Verwendung des Dienstprogramms zur Online-Indexreorganisation in Betracht kommen.
Bei der Entscheidung, wann die Tabellendaten reorganisiert werden sollten, sind folgende Faktoren zu beachten:
Zur Ausführung des Dienstprogramms REORG sind die Berechtigungen SYSADM, SYSMAINT, SYSCTRL oder DBADM bzw. das Zugriffsrecht CONTROL für die Tabelle erforderlich.
Das Dienstprogramm REORG verwendet temporäre Tabellen, die bedeutend größer sein können als die ursprüngliche Tabelle, wenn Spalten der Tabelle hinzugefügt wurden oder eine Tabelle LOB-Spalten enthält. Wenn diese temporären Tabellen größer sind, wird die vom Dienstprogramm REORG neu erstellte permanente Tabelle ebenfalls größer.
Bei typisierten Tabellen muß der angegebene Tabellenname der Name der Stammtabelle der Hierarchie sein.
Anmerkung: | Sie können das Dienstprogramm REORG nicht zum Reorganisieren von deklarierten temporären Tabellen verwenden. |
Das Dienstprogramm ermöglicht die Angabe eines temporären Tabellenbereichs, der zur Erstellung der temporären REORG-Tabellen verwendet wird. Wenn kein temporärer Tabellenbereich angegeben wird, erstellt das Dienstprogramm die temporären REORG-Tabellen in dem Tabellenbereich, der die zu reorganisierende Tabelle enthält. Beachten Sie folgende Richtlinien bei der Entscheidung, ob ein temporärer Tabellenbereich zu verwenden ist:
Das Dienstprogramm REORG schließt implizit alle geöffneten Cursor.
Achten Sie darauf, daß Sie möglicherweise eine Tabelle in einem Tabellenbereich reorganisieren, der Seiten mit einer Größe über 4 KB (d. h. 8 KB, 16 KB oder 32 KB) verwendet. Während der Reorganisation muß der verwendete temporäre Tabellenbereich Seiten derselben Größe wie der Basistabellenbereich verwenden.
Wenn das Dienstprogramm REORG nicht erfolgreich beendet wird, dürfen die temporären Dateien, Tabellen oder Tabellenbereiche nicht gelöscht werden. Mit Hilfe dieser Dateien und Tabellen kann der Datenbankmanager die Änderungen des Dienstprogramms REORG rückgängig machen oder die Reorganisation abschließen, je nachdem wie weit die Reorganisation vor dem Auftreten des Fehlers vorangeschritten war.
In einer partitionierten Datenbank organisiert das Dienstprogramm REORG Daten in jeder Partition neu. Wenn das Dienstprogramm in einer Partition fehlschlägt, werden nur die REORG-Änderungen in dieser Partition rückgängig gemacht. Wenn Sie einen Verzeichnispfad zum Speichern der temporären Tabellen angeben, wird dieser Pfad vom Datenbankmanager auf jeder Datenbankpartition erweitert. Daher werden die temporären Dateien, wenn Sie einen Pfad angeben, der von anderen Datenbankpartitionen mit benutzt wird, in verschiedenen (durch den Knotennamen identifizierten) Unterverzeichnissen unter diesem Pfad gespeichert.
Eine Online-Reorganisation ist dadurch möglich, daß ein benutzerdefinierbarer Schwellenwert für die Maximalgröße des freien Speicherbereichs auf einer Indexseite (Blattseite) zur Verfügung gestellt wird. Wenn ein Indexschlüssel aus einer Blattseite gelöscht und dabei der Schwellenwert überschritten wird, werden die benachbarten Indexseiten daraufhin überprüft, ob zwei Blattseiten zusammengefügt werden können. Wenn auf einer Seite ausreichend Platz zum Zusammenfügen zweier benachbarter Seiten vorhanden ist, erfolgt die Zusammenfügung, ohne daß die Datenbank offline genommen werden muß.
Diese Online-Reorganisation des Index ist nur möglich für Indizes, die in diesem und den nachfolgenden Releases erstellt werden. Vorhandene Indizes, für die die Möglichkeit der Online-Reorganisation in dieser Weise erforderlich ist, müssen gelöscht und anschließend erneut erstellt werden, um die nötigen internen Änderungen an den Indexseiten durchzuführen. Die Online-Indexreorganisation für einen bestimmten Index wird durch die Angabe eines Werts MINPCTUSED bei der Erstellung des Index aktiviert. Der Wert für MINPCTUSED sollte auf weniger als einhundert (100) gesetzt werden. Dieser Wert stellt die Reorganisationsschwelle dar und wird als Prozentsatz des auf einer Indexseite belegten Speicherbereichs angegeben, der der letzte akzeptable Wert ist, bevor eine Zusammenfügung der Indexseite mit der Nachbarseite versucht wird. Der empfohlene Wert für MINPCTUSED ist einer, der unter 50 % liegt, da der Zweck darin besteht, zwei benachbarte Indexseiten zusammenzufügen. Durch den Wert 0 für MINPCTUSED, der gleichzeitig der Standardwert ist, wird die Online-Reorganisation inaktiviert.
Indexseiten, die nach einer Online-Indexreorganisation zur Verwendung frei geworden sind, stehen zur Wiederverwendung zur Verfügung. Allerdings sind diese freien Seiten nur für andere Indizes in derselben Tabelle verfügbar. Eine vollständige Reorganisation der Tabelle gibt Seiten für andere Objekte frei, wenn mit einem DMS-Speichermodell gearbeitet wird. Bei Verwendung eines SMS-Speichermodells hingegen wird der entsprechende Plattenspeicherplatz freigegeben.
Nichtblattseiten von Indizes werden infolge einer Online-Indexreorganisation nicht freigegeben. Aber durch eine vollständige Reorganisation der Tabelle wird die Größe des Index minimiert. Die Blattseiten und Nichtblattseiten werden ebenso wie die Indexstufen zahlenmäßig reduziert.
Damit die Reorganisation einer Tabelle weniger häufig erforderlich wird, führen Sie nach dem Erstellen der Tabelle folgende Schritte aus:
Jetzt verfügen Sie über eine Tabelle mit einem Clusterungsindex. Der Clusterungsindex sorgt in Verbindung mit PCTFREE für die Tabelle dafür, daß die ursprünglich sortierte Reihenfolge erhalten bleibt. Bei ausreichend Platz auf den Seiten können neue Daten auf den richtigen Seiten eingefügt und so die Clusterungsmerkmale des Clusterungsindex erhalten bleiben. Wenn mit wachsender Menge eingefügter Daten die Seiten der Tabelle voll werden, werden Datensätze an das Ende der Tabelle angehängt und die Tabelle verliert allmählich ihre Clusterung.
Es ist empfehlenswert, eine REORG-Operation oder eine Sortierung und LOAD-Operation nach der Erstellung eines Clusterungsindex durchzuführen. Ein Clusterungsindex versucht, eine bestimmte Reihenfolge der Daten zu erhalten, um so die statistischen Werte für CLUSTERRATIO bzw. CLUSTERFACTOR zu verbessern, die vom Dienstprogramm RUNSTATS gesammelt werden.
Die Größe des Speicherbereichs, der bei einer REORG-Operation auf jeder Seite freizulassen ist, wird durch den Wert für PCTFREE der Tabelle bestimmt. Wenn dieser Wert nicht definiert ist, füllt REORG die Seiten während der Reorganisation mit Daten auf.