Announcement

Collapse
No announcement yet.

Unterschiedlicher Tabellen - Speicherbedarf

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unterschiedlicher Tabellen - Speicherbedarf

    Hallo,

    ich habe ein Frage zu der Speicherverteilung in Oracle bzgl. Tabellen.

    Ich habe...

    CREATE TABLE t1 (
    KUNDEN_ID NUMBER,
    VAL1 NUMBER,
    VAL2 NUMBER,
    ....
    VAL100 NUMBER);

    In t1 werden 1 Millionen Datensätze(rows) gespeichert mit je 100 Werten(val1..100)!


    Wenn ich die Tabelle in Normalform 3 erstelle

    CREATE TABLE t2 (
    KUNDEN_ID NUMBER); ==> 1 Mio Einträge

    CREATE TABLE t3 (
    ID NUMBER,
    VAL NUMBER,
    t2_ID NUMBER); ==> Je Eintrag aus t2 gibt es hier 100 Einträge

    Wieso ist die Tabelle t3 in Bezug auf den Speicher 4 x so groß wie t1, da theoretisch ja die gleichen Byte-Werte gespeichert werden müssen - lediglich einmal in horizontaler und vertikaler form.

    Gruß Volker

  • #2
    Hallo Volker,

    welchen Wert legst du denn für die Ermittlung des "Speichers" zugrunde?

    Die kleinste Speichereinheit einer Oracle-DB ist ein Block. Die Blockgröße (DB_BLOCK_SIZE) wird beim Erstellen der DB festgelegt, sollte ein Vielfaches der physischen Blockgröße des Datenlaufwerkes sein und ist später nicht mehr änderbar. Wenn deine DB also z.B. eine Blockgröße von 8KB hat, dann belegt eine Tabelle mit nur einem DS midestens 8K, selbst wenn nur 1Byte Daten drinstehen. Die Blöcke wiederum werden in s.g. Extents zusammengefasst. (Aber das geht dann zu weit )
    Idealerweise passt ein DS genau n-mal in einen Block, dann wäre es theoretisch möglich ihn vollständig zu belegen also keinen Platz zu verschwenden. Praktisch tritt dieser Fall aber so gut wie nie ein, so daß immer am Ende eines Blockes "Leerraum" bleibt. Wieviel Lerraum das ist, wird mit dem Parameter PCT_FREE beim Erstellen der Tabelle festgelegt. PCT_FREE ist ein Prozentwert, ab dem Oracle den Block als "Voll" ansieht und auf den nächsten zugreift. Ist dieser Wert sehr hoch, dann wird u.U. viel Platz "vergeudet". Ein rel. hoher Wert macht aber unter bestimmten Umständen durchaus Sinn. Z.B. wenn sich die Daten häufig ändern und durch enthaltene VARCHAR-Felder der benötigte Platz differiert.
    Die Summe der belegten Blöcke und damit des verwendeten Speichers ist also bei einem großen DS keinesfalls die Summe mehrerer Kleiner, selbst wenn deren logische Größe diesen Schluß zuliese.

    Ich hoffe ich habe es etwas verständlich gemacht (und nicht nur die Verwirrung noch größer )

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X