Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Größenberechnung von ISAM-Dateien

Die Berechnung der Dateigröße lässt sich für NK-ISAM und K-ISAM einheitlich durchführen. Dazu wird zunächst die Anzahl der Datenblöcke berechnet aus Satzlänge, nutzbarer Blockgröße und Anzahl der Datensätze.


nutzbare Blocklänge:

RECSIZE <= (n * 2048 (100 - PAD) / 100)

==> nutzbare Blocklänge = n * 2048 (100 - PAD) / 100

(n * 2048 (100 - PAD) / 100) <= RECSIZE <= n * 2048

==> nutzbare Blocklänge = RECSIZE

n

Blockungsfaktor

PAD

PAD-Wert (siehe PAD-Operand im Makro FILE)

RECSIZE

Satzlänge

Größe des Datenteils:

Anzahl Sätze pro Datenblock = (nutzbare Blockgröße / RECSIZE)

Anzahl Datenblöcke = (Sätze pro Datei / Sätze pro Datenblock)


Für NK-ISAM ist zusätzlich die Anzahl der Überlaufblöcke abzuschätzen. Sie ist abhängig von der Satzlänge:


Überlaufblöcke:

Anzahl Überlaufblöcke = i * Anzahl Datenblöcke

i = 0

für RECSIZE <= n * 2032 - 16

i = 1

für RECSIZE > n * 2032 - 16


Primärindexblöcke sequenziell erstellter NK-ISAM-Dateien enthalten im Durchschnitt ca. 200 Primärindexeinträge. Damit ergibt sich folgende Abschätzung:


Dateigröße:

Anzahl PAM-Seiten = Anzahl Datenblöcke *(BLKSIZE + i+ 0.005)

i = 1 / i= 0 berücksichtigt Überlaufblöcke (siehe oben)

Bei NK-ISAM-Dateien kann die Gesamtzahl der Primärindexblöcke einer Datei näherungsweise mit der Zahl der Primärindexblöcke in der untersten Primärindexebene gleichgesetzt werden. Aus den folgenden Tabellen lässt sich die Größe von NK-ISAM-Dateien leicht ableiten.

Bei sequenziell erstellten NK-ISAM-Dateien enthält jeder Primärindexblock ca. 200 Primärindexeinträge (Schlüsselkomprimierung!); daraus lässt sich folgende Tabelle ableiten:

Anzahl Datenblöcke

Anzahl Primärindexebenen

0 – 200
200 – 40000
40000 – 8000000

1
2
3

Tabelle 50: Berechnung der Primärindexebenen für sequenziell erstellte NK-ISAM-Dateien

Für nicht-sequenziell erstellte Dateien wächst die Anzahl der Primärindexebenen auf Grund des Blocksplittings schneller als für sequenziell erstellte Dateien. Im Mittel enthält ein Primärindexblock ca. 160 Primärindexeinträge, wenn mehr als eine Primärindexebene existiert.

Anzahl Datenblöcke

Anzahl Primärindexebenen

0 – 200
200 – 32000
32000 – 5120000

1
2
3

Tabelle 51: Berechnung der Primärindexebenen für nicht-sequenziell erstellte NK-ISAM-Dateien

Bei einer Datei mit Sekundärschlüsseln kann die Anzahl der Sekundärindexblöcke gemäß der nachfolgenden Formel abgeschätzt werden. In dieser Formel ist berücksichtigt, dass versucht wird, die Sekundärindexblöcke zumindest zu 75 % zu füllen. Dieser Füllgrad stellt nur einen Mittelwert dar. Es kann Fälle geben, in denen diese Zahl nicht erreicht werden kann.


Sekundärindexblöcke für den i-ten Sekundärschlüssel:

Anzahl PAM-Seiten =
Anzahl Datensätze * (P-KEYLEN + 8 + hi * (S-KEYLENi + 8)) / 1512

PAM-Seiteni

PAM-Seiten der Sekundärindexblöcke für den i-ten Sekundärschlüssel

P-KEYLEN

Länge des Primärschlüssels der Datei

hi

                               

Relative Häufigkeit, mit der im i-ten Sekundärschlüssel der Datei verschiedene Werte vorkommen: Haben zum Beispiel in der Datei durchschnittlich
jeweils 10 Datensätze den gleichen Wert im i-ten Sekundärschlüssel, so ist hi = 0,1.

S-KEYLENi

Länge des i-ten Sekundärschlüssels


Die Gesamtzahl der Sekundärindexblöcke für alle Sekundärschlüssel in der Datei ergibt sich dann als Summe der Beiträge aller vereinbarten Sekundärschlüssel:


Sekundärindexblöcke einer Datei mit n Sekundärschlüsseln

Anzahl PAM-Seiten = Anzahl PAM-Seiten1 + . . . + Anzahl PAM-Seitenn


K-ISAM

Für K-ISAM-Dateien ist die Anzahl der Primärindexeinträge von der Schlüssellänge abhängig:

Anzahl der Einträge pro Primärindexblock = 1024 / (KEYLEN + 4)

In dieser Formel ist berücksichtigt, dass für Primärindexblöcke nur ein Füllgrad von 50 % erreichbar ist. Die Gesamtgröße einer K-ISAM-Datei errechnet sich dann folgendermaßen:

Dateigröße:

Anzahl PAM-Seiten = Anzahl Datenblöcke * (BLKSIZE + ((KEYLEN + 4) / 1024))

KEYLEN: Schlüssellänge