PDA

Vollständige Version anzeigen : Grösste (bytemässig) Tabelle ermitteln


StehtimSchilf
16.01.2003, 21:15
Um unserer riesigen Daten (wirklich nur DATEN)-Bank entgegenzutreten, wollen wir die DB jetzt aufsplitten! (Bringt das performancemässig überhaupt was?)

Da die DB gewisse "Tabellen-Gruppen" besitzt, möchten wir nun ermitteln, welche "Gruppe" am meisten Platz beansprucht!

Wie kann ich nun einfach ermitteln welche Tab wieviel Platz beansprucht?

Logo - die Tabs wachsen, manche schneller, manche gar nicht...

Ich hab mir so was überleg:
für jedes Feld der Tab, ermittle Datentyp, anhand des Datentyps weiss ich ja wieviel Platz der beansprucht, dann das Resultat * Anzahl Records!

So als Richtwert

Ich weiss ja, welche Tabs schnell wachsen und welche nicht nur ist es schwer abzuschätzen was wilder ist: 40Felder*50'000 Records oder 10Felder x 500'000 Records!


angeri schlafe um diä Zyt :bawling:

Sascha Trowitzsch
16.01.2003, 22:41
Für die Datentypen steht irgendwo in der Hilfe, wieviel Bytes sie belegen.
Beim Datentyp Text und Memo kann man das aber nicht sagen, weil sie variabel sind. Für diese müsstest du einen VBA-Code durchlaufen lassen (alle Tabellen, alle Stringfelder) und jeweils Len(String) aufaddieren.
Es ist dabei wahrscheinlich nicht nötig, das für alle Datensätze zu machen. Eine Stichprobe von sagen wir 3000 DS dürfte schon statistisch ausreichend genau sein, um die jeweilige durchschnittliche Stringlänge zu ermitteln.
Die dann multipliziert mit RecordCount.

Aber: Aus Performancegründen in einzelne Backends aufzusplitten ist kontraproduktiv. Es wird langsamer. Das ist Meinung in comp.databases.msaccess und auch Ergebnis eigener Tests.

Ciao, Sascha

StehtimSchilf
20.01.2003, 11:51
Danke für den Hinweis, dass dies kontraprokuktiv ist :))))))

kama
20.01.2003, 12:12
Hallo
Nach meiner Erfahrung ist die Größe einer Datenbank (solange sie in den spezifizierten Grenzen bleibt) unerheblich. Interesant wird es nur wenn ich auf die Daten zugreifen will. Hier hilft eine Arichivierung nicht mehr benötigt Daten und eine Überprüfung der verwendeten Datentypen und Datenfeldgrößen.

Also würde ich nunächst mal überprüfen was steht denn drinn in meinen Tabellen. Ist für das Feld der richtige datentyp gewählt. z.B. Double oder Decimal wo Integer (Kleiner sollte es nicht sein) oder Single ausreichend seien würde. Ist die Länge der Textfelder angemessen? wenn nur ein Zeichen drinsteht und Feldlänge auf 255 gestellt ist wird (bin mir da aber nicht sicher) pro Zeichen 4 Byte gebraucht. ´Das heißt pro feld!!! 1 KB.
Und zuletzt ist die DB normalisiert? (Keine Redunanz)

Ich hofe das hilft dir etwas weiter.

Sascha Trowitzsch
20.01.2003, 13:13
@kama:

Ne, da hast du was durcheinander gebracht.
Zunächst mal braucht ein Zeichen eines Textfeldes 1 Byte in A97 und 2 Bytes in A2000/XP. Wenn in letzterem aber Unicode-Kompression eingeschaltet ist, so reduziert sich das in etwa auf die Hälfte.
Bei Memofeldern nützt die Unicode-Kompression erst bei Textlängen ab 2000. Davor wird in eine 4kb-Seite gespeichert, wenn ich mich recht erinnere.

Die Anzahl der Bytes, die ein Textfeld belegt, ist zum Glück nicht von der "Feldgröße" abhängig (im Unterschied zu z.B. dBase). Das ist im Tabellenentwurf etwas missverständlich. Die Feldgröße gibt bloß ein Limit der eingebbaren Zeichen an. Gespeichert wird aber nicht mehr, als eingegeben. Es wird nicht etwa mit Nullen aufgefüllt.

Ciao, Sascha

kama
20.01.2003, 13:58
@Sascha
Danke für die informationen :)