Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Große Datenbank wie verkleinern !?

Begonnen von elaine, Januar 26, 2011, 22:06:13

⏪ vorheriges - nächstes ⏩

elaine

Hallo alle miteinander !

Meine Datenbank im accdb-Format ist mittlerweile ziemlich stattlich (ca. 500 MB trotz wöchentlichem Compact & Repair). Um dem entgegenzuwirken habe ich nun schon des Öfteren ein bißchen aufgeräumt - heute zum Beispiel aus einer datensatzlastigen Tabelle (50.000 records) ein Memo-Feld rausgelöscht. Das sollte doch nun nach Compact & Repair einen Effekt auf die Größe der DB haben, oder etwa nicht ? Auch decompile via decompile-command per "Run..." und danach debug/compile habe ich probiert. Außerdem auch eine neue DB erstellen und alles nacheinander importieren, aber dann hab ich schon nur nach dem Iport der Tabellen 480 MB. Es hat also bisher nichts geholfen. Mache ich was falsch ? Habe ich was vergessen ?

Ich danke euch schon im Voraus meine Access-Engel :)

database

Hallo und guten Morgen,

eine Datenbank, die nur 'normale' Texteinträge speichert und einen derartigen Umfang besitzt muss schon ein ordentliches Monster sein.
Verwendest du in deiner Datenbank die tollen mehrwertigen Felder? Speicherst du Dokumete oder Bilder in deinen Tabellen?

50.000 Datensätze sind ein Klax! Wenn das Entfernen des Memofeldes keinen erkennbaren Effekt hat, nehme ich an, dass da nicht viel drin gestanden hat.
Daher tippe ich mal auf dieses mehrwertige Superfeature - Anlagefelder!

Bin auf deine Info gespannt. 

elaine

Nein keine tollen mehrwertigen Felder. Meine DB ist zwar im accdb-Format, ist aber nach bestem Wissen und Gewissen nach alter mdb-Manier programmiert. Bilder und Dokumente speichere ich auch keine, also eigentlich nur Text und Zahlen.

Insgesamt habe ich ca. 30 Tabellen, in denen wir Informationen einarbeiten und ca. 40 Tabellen, die ich Nachschlagetabellen nenne, weil dort lediglich Legenden (z.B. für Nachschlagefelder) hinterlegt sind. Die Datenbank ist ziemlich komplex, an einigen Stellen simuliere ich bspw. m:n-Verbindungen. Mit Hilfe von Indizes und Plausibilitätsprüfungen wahren wir aber (wie ich finde) ein gutes Maß an Konsistenz.

Ja, in den Memo-Felder stand tatsächlich nicht viel drin (deswegen konnte ich sie auch einfach loswerden). Ich habe aber vor kurzem auch bspw. aus einer Tabelle mit ca. 20.000 Datensätzen drei Textfelder gelöscht, die schon relativ gut befüllt waren, was aber auch keinen Effekt hatte.

Ich habe wie du eben auch das Gefühl, dass die DB mit 500 mb zu groß ist. Zumal eben wirklich das meiste aus IDs, Zahlen, ein bißchen Text und auch nur ein wenig VBA-Code besteht . . . Auch die datensatzlastigsten Tabellen haben glaube ich nicht mehr als 100.000 Datensätze, also woran kann das noch liegen ? Und was kann ich tun ?

Danke schonmal für weitere Tipps !

MzKlMu

Hallo,
schon mal an die Indizes gedacht?
Jedes indizierte Feld erzeugt intern eine weitere Tabelle mit dem Datensatzzeiger und dem indizierten Feld.
Also wenn man in einer Tabelle mit 20 Feldern und zwei indizierten Feldern hat, werden noch mal 2 interne Tabellen angelegt mit je 2 Feldern, dem Datensatzzeiger und dem indizierten Feld.
Daher sollte man Indizierungen auch sparsam umgehen. Indizierungen machen nur für Schlüsselfelder Sinn und Felder in den häufig gesucht/sortiert  wird.
Gruß Klaus

elaine

Aha, guter Tipp ! Das werde ich mal ausprobieren - ich habe nämlich für meinen Geschmack tatsächlich sinnlose Indizierungen drin, die Access selber vorgeschlagen hat, wenn man die eingebaute Performance Analyse laufen lässt . .  . Damit schonmal Probleme gehabt ? Ich werde jedenfalls gleich morgen nachschauen, wenn die beiden Mitarbeiter nämlich nicht da sind und ich mich programmiertechnisch ausleben kann.

Danke schonmal !

elaine

Guten Morgen !

Also, ich habe mich gleich heute morgen an die Indizes gemacht und unglaublich viele *dieser von Access selber erstellten* geloescht. Leider hat auch dies - auch nach decompile, compact&repair und neue Datenbank erstellen usw. - keinen Effekt :( Allerdings waren das auch alles keine "unique" Indizes - keine Ahnung, was Access damit überhaupt bezwecken wollte.

Naja, jedenfalls hat meine DB nun immer noch 500 MB. Hat jemand noch weitere Ideen, was ich probieren könnte ?

database

Hallo,

klingt alles ein wenig seltsam.

Versuche mal  ALLE Tabellen - UND NUR DIE TABELLEN - in eine neue DB zu exportieren und stell dann mal die Größe dieser DB fest.

Das da...
Zitatan einigen Stellen simuliere ich bspw. m:n-Verbindungen
... was meinst du mit SIMULIEREN - m:n - Beziehungen werden i.d.R. in 2x 1:n aufgelöst - die belegen keinen nennenswerten Platz.

Deinen gesammelten Angaben zu Folge vermute ich das Problem nicht in den datenlastigen Teilen.
Aber lass uns mal die Größe der Tabellen alleine feststellen.


elaine

Zitat von: elaine am Januar 26, 2011, 22:06:13
Auch decompile via decompile-command per "Run..." und danach debug/compile habe ich probiert. Außerdem auch eine neue DB erstellen und alles nacheinander importieren, aber dann hab ich schon nur nach dem Iport der Tabellen 480 MB.

Also, schon nur die Tabellen sind so groß.
Ja, mit den m:n-Verbindungen simulieren, das atte ich so gemeint, wie du sagst. "Simulieren" deswegen weil es eben ja in Access nur 1:n gibt, aber wie du sagst - das hat wohl nix mit meinem derzeitigen Problem zu tun.

Danke schonmal

database

Uuupsss,

das hab' ich in der Eile überlesen.

Hmmm...  mal sehen ob ich noch was Interessantes finden kann...

MzKlMu

#9
Hallo,
eine Möglichkeit wäre auch noch, dass die DB wirklich so groß ist.
ZitatAuch die datensatzlastigsten Tabellen haben glaube ich nicht mehr als 100.000 Datensätze,
Mehrere Tabellen mit 100.000 Datensätzen ist ja auch schon was. Wenn ein Datensatz 1000 Byte (=1000 Zeichen hätte, wären das mit einer Tabelle schon rund 100 MB. Zuzüglich der Byte zum Programm.
Gruß Klaus

oma

Hallo,

ich denke, das die DB kann mit den angegebenen DS-Zahlen "normal" nicht so groß sein kann! Auch, wenn wir die Feldanzahl in der Tabellen nicht kennen.

hier einmal Vergleiche mit DBs aus meinem Archiv:

1.)   Ein DB  zum Testen von Geschwindigkeiten in DB (für Abfragen u. Code-Vergleiche)
3 Tabellen mit jeweils 5 Felder und jeweils 500.000 ! DS; wenig Code; ergibt insgesamt eine DB-Größe von 52 MB

2.)  Ein "reale" DB mit 12 Tabellen; davon 9 kleine Nachschlagetabellen u. 1 Tabelle mit 7 Felder u. 1.259.313 ! DS ; 1 Tabelle mit 6 Felder u. 14.838 DS; 1 Tabelle mit 2 Felder u. 15.383 DS, DB mit viel Module u. Code;  ergibt insgesamt eine DB-Größe von 83 MB

Warum deine DB ohne Bilder so groß ist, verstehe ich allerdings auch nicht.
Mache doch einmal mit einer Kopie ein schrittweises Lösches u. jeweiliges komprimieren (bei den Schritten Tabellen , Formulare , Code und Abfragen in Schritten löschen). Vielleicht kommt damit ja was ans Licht??

Gruß Oma
nichts ist fertig!

MzKlMu

#11
Hallo,
wenn eine DB stark textlastig ist, wird kann die auch recht groß werden.
Ein Textfeld braucht 10 Byte plus 1 Byte für jedes Zeichen. Ein Feld mit 50 Zeichen verbraucht dann 60 Byte. Ein Währungsfeld verbraucht dagegen nur 8 Byte, egal wie groß die Zahl ist (im Rahmen des Wertebereichs). Tabellen mit vielen Textfeldern mit viel Eintrag sind auch schnell groß.
Man müsste also auch mal wissen, was mit welchen Feldern gespeichert wird.
Gruß Klaus