Nur Indexseiten analysieren
Der Befehl, nur Benutzerindizes in der Datenbank zu analysieren, lautet:
gstat employee -index >employee.gst
Die mit diesem Befehl ausgegebenen Ergebnisse listen die Benutzertabellen in alphabetischer Reihenfolge auf.Es werden keine Tabellen analysiert.Der Bericht listet jedoch die Tabellennamen in alphabetischer Reihenfolge auf und listet alle anwendbaren Indizes unter dem entsprechenden Tabellennamen auf.
Nach Abschluss der Analyse können die Ergebnisse wie folgt interpretiert werden.Das folgende Beispiel zeigt die Ausgabe eines einzelnen Index in einer Datenbank.
CONFIGREVISIONSTORE (213) Index PK_CONFIGREVISIONSTORE (0) Depth: 3, leaf buckets: 174, nodes: 62372 Average data length: 2.58, total dup: 0, max dup: 0 Fill distribution: 0 - 19% = 15 20 - 39% = 0 40 - 59% = 55 60 - 79% = 68 80 - 99% = 36
Der obige Auszug aus dem Bericht beginnt mit der Anzeige des Tabellennamens — CONFIGREVISIONSTORE
— und der Tabellen-ID — 213 wie oben beschrieben.
Nach den Details der Tabelle — und nur der Name und die ID werden angezeigt — werden die Indexdetails angezeigt.Wie oben werden der Indexname und seine ID angezeigt.Dieses Mal bezieht sich die ID auf die Position des Index in der Liste aller in der Tabelle erstellten Indizes.ID Null ist der erste erstellte Index, ID 1 ist der nächste und so weiter.Die Ausgabe von gstat
listet die Indizes möglicherweise nicht in der ID-Reihenfolge auf. Wenn Indizes erstellt, aber anschließend gelöscht wurden, kann es zu Lücken in der ID-Sequenz kommen.
In den nächsten beiden Zeilen nach dem Indexnamen und der ID werden die Gesamtstatistiken für diesen Index angezeigt.
- Depth
-
Diese Statistik zeigt die Anzahl der Seiten an, auf die zugegriffen werden muss, um zu einem Indexeintrag zu gelangen.In diesem Beispiel müssen wir drei separate Seiten in den Puffercache lesen, bevor wir die Indexdetails verwenden können, um auf die gewünschte Zeile in der Tabelle zuzugreifen.Dies wird häufig als Index-Indirektion bezeichnet.
Depth: 3
Auf der Festplatte befindet sich eine Index-Stammseite (Root Page) der obersten Ebene, die gleichzeitig mit der Datenbank erstellt wird.Diese Seite enthält eine Liste von Zeigern auf die obere Seite (Apex) für jeden Index — eine Seite pro Index.Für jeden Index enthält diese Seite eine Liste mit Zeigern auf Folgendes:
-
Apex-Seiten einer anderen Ebene, wenn die Tiefe größer als 1 ist, oder,
-
zu den Blattseiten (Leaf Pages) für die tatsächlichen Indexdaten, wenn Tiefe = 1.
Auf den Blattseiten wird der Speicherort der indizierten Daten gespeichert.Die Indextiefe ist die Anzahl der Ebenen, die Sie von der Apex-Seite des Index herabsteigen müssen, um zu den Blattseiten zu gelangen.Weder die Indexstammseite noch die Apex-Seite des Index werden in der Tiefe gezählt.
Im Durchschnitt zeigt eine Tiefe von 2 oder weniger einen Index an, der effizient ist.Wenn die Tiefe 3 oder mehr beträgt, funktioniert der Index höchstwahrscheinlich nicht optimal.Die Lösung in dieser Situation besteht darin,
gbak
zu verwenden, um die Größe der Datenbankseite zu erhöhen, indem eine Sicherung erstellt und wie folgt wiederhergestellt wird:tux> # Datenbank herunterfahren tux> gfix -shut -tran 60 employee tux> # Datenbank sichern tux> gbak -backup employee /backups/employee.fbk tux> # Aktuelle Seitengröße ermitteln tux> gstat employee -header | grep -i "page size" page size 4096 tux> # Datenbank mit einer größeren Seitengröße wiederherstellen tux> gbak -replace overwrite -page 8192 /backups/employee.fbk employee tux> # Neue Seitengröße prüfen tux gstat employee -header | grep -i "page size" page size 8192 tux> # Datenbank hochfahren tux> gfix -online normal employee
Sobald dies ausgeführt wurde, sollten Sie feststellen, dass die Tiefe des Index 2 oder weniger beträgt.Ist dies nicht der Fall, wiederholen Sie einfach den obigen Vorgang mit einer noch größeren Seitengröße.
WarningDer obige Befehl zum Wiederherstellen der Sicherung überschreibt die ursprüngliche Datenbankdatei.Dies funktioniert, indem die Originaldatei gelöscht und neu erstellt wird. Sie müssen also wirklich sicherstellen, dass Ihre Datenbanksicherung tatsächlich funktioniert und dass die erstellte Sicherungsdatei verwendet werden kann, bevor Sie versuchen, eine Datenbank zu überschreiben.Weitere Informationen finden Sie im
gbak
-Handbuch. -
- Leaf buckets
-
Diese Statistik informiert uns über die Anzahl der Blattseiten, die dieser bestimmte Index verwendet.Eine Seite und ein Bucket sind synonym, aber Seite ist der modernere Begriff, der häufig verwendet wird.
leaf buckets: 174
In unserem Beispielindex sehen wir, dass die Datenbank 174 Seiten enthält, die die Details der indizierten Werte für diese Tabelle enthalten. Alle diese Seiten enthalten Zeiger auf die Daten.
Die Anzahl der Blattseiten sollte mit der Summe der Gesamtzahl der Seiten in jeder Histogrammleiste in der unten gezeigten Füllverteilung übereinstimmen.
- Nodes
-
Dies ist die Gesamtzahl der Datensätze in der Tabelle, die indiziert wurden.Es ist jedoch möglich — da
gstat
nicht transaktionsbewusst funktioniert --, dass diese Zahl möglicherweise Zeilen enthält, die gelöscht (und nicht durch Müll gesammelt) wurden und / oder Datensätze mehr als zählen einmal, wenn sie so geändert wurden, dass die indizierten Spalten geändert wurden.nodes: 62372
Aus den oben genannten Gründen ist es ratsam, vor dem Ausführen von
gstat
einen Sweep oder eine Datenbanksicherung und -wiederherstellung durchzuführen, um sicherzustellen, dass die gesammelten Statistiken korrekt sind und die wahre Position der Datenbank widerspiegeln. - Average data length
-
Diese Statistik gibt die durchschnittliche Länge der Schlüsselspalte(n) in Bytes an.
Average data length: 2.58
+Dies ist höchstwahrscheinlich weniger als die tatsächliche Summe der Spaltengrößen, da Firebird die Indexkomprimierung verwendet, um die Datenmenge auf einer Indexblattseite zu reduzieren.
- Duplicates
-
Duplikate sind in einem Primärschlüssel oder einem eindeutigen Index nicht zulässig.Andere Indizes erlauben Duplikate, und diese Statistiken geben Auskunft über die Anzahl der Duplikate, die der Index enthält.Die folgende
isql
-Abfrage zeigt die Details von Duplikaten für eine indizierte Spalte in einer anderen Tabelle als der bisher verwendeten — die keine Duplikate enthält.SQL> SELECT IDX, COUNT(*) CON> FROM NORMAN_TEST CON> GROUP BY IDX; IDX COUNT ============ ============ 1 10 2 4 3 1
Von oben sehen wir insgesamt 15 Zeilen, von denen es 14 doppelte Werte gibt (alle mit einer 1 oder 2 in der IDX-Spalte). Das Folgende ist der Auszug für die Duplikate für diese Tabelle:
Index NORMANX (0) Depth: 1, leaf buckets: 1, nodes: 15 Average data length: 0.27, total dup: 12, max dup: 9
Total dup ist die Gesamtzahl der Duplikate im Index.Beachten Sie, dass nur 12 Duplikate aufgelistet sind, wir jedoch bereits wissen, dass der Index 14 Duplikatzeilen enthält.Wie ist das möglich?
Das erste Auftreten einer 1 und das erste Auftreten einer 2 werden von
gstat
nicht als Duplikate gezählt.Nur die zweite und die nachfolgenden Kopien gelten als Duplikate.NoteMeiner Meinung nach ist dies kein ganz korrektes Verhalten.In der obigen Tabelle gibt es 15 Zeilen und nur drei eindeutige Werte in der IDX-Spalte, die indiziert ist.Mein Index enthält daher 14 doppelte Werte und nicht nur 12.
Sie können jedoch den Gesamt-Dup-Wert verwenden, um die Anzahl der eindeutigen Werte im Index zu extrahieren, indem Sie sie vom Knotenwert subtrahieren.
Max dup gibt die Anzahl der Indexeinträge an, die die längste Kette von Duplikaten gemeinsam haben.Mit anderen Worten — für den obigen Index — gibt es 9 Indexeinträge, die den gleichen Wert in der indizierten Spalte haben.Wir können sehen, dass dies wahr ist, da die Zeilen, in denen IDX 1 ist, 9 doppelte Einträge haben.
Wenn sich max dup dem Gesamtdup nähert, ist es eine vernünftige Annahme, dass der Index möglicherweise eine so geringe Selektivität aufweist, dass er möglicherweise nie in Abfragen verwendet wird.
- Fill distribution
-
Der Rest des Berichts für unseren ursprünglichen Beispielindex zeigt, wie die Seiten im Index verwendet werden.
Fill distribution: 0 - 19% = 15 20 - 39% = 0 40 - 59% = 55 60 - 79% = 68 80 - 99% = 36
Die Abbildungen stellen eine Grafik (oder ein Histogramm) dar, wie der Platz auf den Indexseiten genutzt wird.Jeder Wert des Histogramms repräsentiert die Anzahl der Seiten im gesamten Index, die bis zu einem bestimmten Prozentsatz gefüllt wurden.Jeder Balken des Histogramms repräsentiert den Prozentsatz, der für die Seite gefüllt ist.
Die Füllverteilung des Beispielindex ist oben dargestellt. Aus diesen Zahlen geht hervor, dass die überwiegende Mehrheit der Seiten zu 40 bis 99% gefüllt ist. Die einzelnen Zahlen am Ende jeder Zeile oben geben die Anzahl der Seiten in diesem Band an.Das Beispiel zeigt Folgendes:
-
15 pages have been filled to less than 20%; and
-
0 pages have been filled to between 20% and 39%; and
-
55 pages have been filled to between 40% and 59%; and
-
68 pages have been filled to between 60% and 79%; and
-
36 pages are filled to between 80% and 99%.
Die Summe aller dieser Seiten sollte sich zu der oben für Blattknoten gezeigten Zahl addieren.
Dieser Index zeigt eine recht gute Speicherplatznutzung, da die meisten Seiten gut gefüllt sind.Idealerweise möchten Sie, dass alle Seiten zu 80 bis 99% gefüllt sind. Wenn der Bericht andererseits zeigt, dass alle Seiten leicht gefüllt sind - beispielsweise weniger als 60% -, wäre der Index ein guter Kandidat für eine Wiederherstellungsübung.
Berücksichtigen Sie unbedingt die Gesamtzahl der Knoten, bevor Sie mit der Neuerstellung beginnen. Wenn der Index nur eine geringe Anzahl von Knoten enthält, hilft die Neuerstellung nicht bei der Speicherplatznutzung, da möglicherweise nicht genügend Datensätze vorhanden sind, um die Indexseiten tatsächlich zu füllen.
-