Einzelnen Beitrag anzeigen

Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Firebird Datenbankgröße

  Alt 2. Mai 2014, 12:27
werden nach dem Insert keine Änderungen an den Daten vorgenommen und keine weiteren Inserts durchgeführt? Bzw. wenn dann erst ein Delete * from... bzw. ein großer Insert mit Massendaten?

Dann könnte folgendes was bringen: Firebird speichert die Daten ja auf "Pages" die aber nicht zu 100% gefüllt werden, um Lücken für spätere Inserts zu lassen um wegen dem Index nicht alles umsortieren zu müssen.

Macht man aber nur einmal einen großen Insert und ändert die Daten hier kaum noch, kann man auch die Seiten komplett füllen und damit wir die Datei an sich kleiner.

Mach mal ein gstat -data <Database>. Dann sollte so was raus kommen:

Code:
CONFIGREVISIONSTORE (213)
    Primary pointer page: 572, Index root page: 573
    Data pages: 2122, data page slots: 2122, average fill: 82%
    Fill distribution:
         0 - 19% = 1
        20 - 39% = 0
        40 - 59% = 0
        60 - 79% = 79
        80 - 99% = 2042
Wenn hier viele Seiten nur 60-80% gefüllt sind, verlierst Du entsprechend Platz.

Ändern kannst Du das über gfix:

http://www.firebirdsql.org/manual/gfix-pagespace.html

gfix -use FULL database_name

[edit]: Vorteil ist, dass im Grunde die Lesegeschwindigkeit steigt, da weniger Pages gelesen werden müssen, nachteil: Inserts dauern auf grund der Index-Optimierung länger. Bei großen Inserts daher besser den Index deaktivieren und anschließend wieder neu aufbauen...

Weiterhin kann die PageSize an sich auch ein Problem sein, wenn diese nicht mit der Sektorengröße auf der Platte zusammen passt - hier sollte aber der Windows-Explorer in neueren WIndows-Versionen die entsprechenden Informationen auch ausgeben können.
  Mit Zitat antworten Zitat