Was ist besser, Resize oder neues DBF ?

ich hatte ein problem mit einer DB das TheBeast netterweise mit mir durchgekaut hat.

dabei ist bei mir die Frage aufgetaucht ob es besser ist ein DBF zu erweitern oder ein neues anzulegen…

ich habe vom erweitern bislang eher die Finger gelassen, weil ich nicht weiß in wieweit das mit Risiken behaftet ist. ich denke da nur an PQmagic, da konnte es schon mal passieren das nach Veränderungen an der Partition nix mehr lief…

hallo chris

ich nehme mal frechweg an, dass du von oracle redest…

erweitern hat den vorteil, dass du mit einem
alter tablespace xxx coalesce ;
den zusätzlichen platz optimal nutzen kannst. das coalesce fasst alle freien extents, die unmittelbar nacheinander liegen zu einem extent zusammen. beispiel: du hast ein datafile mit 100 mb. 80 mb hast du schon verbraten. bleiben 20 mb über. zu vergrösserst das file um 40 mb. wenn du nun versuchst, eine tabelle mit 50 mb anzulegen, bekommst du eine fehlermeldung, dass zuwenig platz da ist. du hast nämlich 2 extents frei, einer mit 20 und einer mit 40 mb. mit dem coalesce kannst du die zwei zu einem extent zusammenfassen (mit 60 mb).

wenn du ein zusätzliches file anhängst, geht das nicht - filegrenzen sind fix (zumindest in oracle 8).

probleme mit dem resizen habe ich in meiner db bis jetzt nicht feststellen können. bei allen aktionen hat es immer anstandslos funktioniert. probleme hast du nur, wenn du in betriebssystem-grenzen reinläufst. je nach bs und filesystemtyp kannst du z.b. nur max. 2 gb grosse files haben. da musst du dann natürlich ein neues file nehmen.

erwin

Hallo Erwin,

danke für die Aussage !

erweitern hat den vorteil, dass du mit einem
alter tablespace xxx coalesce ;

Kannst du mir das mit dem coalesce genauer erklären ?

gibt man einfach „alter tablespace coalesce;“ ein ?

Grüße

Christian

Hallo Chris!

Ich schon wieder *g*

Der Tipp von Erwin stimmt für Dictionary Managed Tablespaces vollinhaltlich, bei Locally Managed Tablespaces (die du mW aber nicht verwendest) kommt das nicht zum Tragen.

Zum Coalesce:
Ich male hier mal ein File (20 Blocks, jedes x ist ein Block, ich weiss, is’n kleines File :wink:)

xxxxxxxxxxxxxxxxxxxx

Jetzt legen wir ein paar Tabellen (X,Y,Z) mit je drei Blocks an (nur ein Extent):

XXXYYYZZZxxxxxxxxxxx

Wir haben also noch 11 Blöcke frei. DBA_FREE_SPACE würde uns diesen einen Extent mit den 11 Blöcken anzeigen. Habe den freien Extent jetzt mal mit ‚a‘ bezeichnet:

XXXYYYZZZaaaaaaaaaaa

Jetzt löschen wir die Tabelle Z wieder, es wird der Platz wieder freigegeben, und ich habe den jetzt mal mit ‚b‘ bezeichnet:

XXXYYYbbbaaaaaaaaaaa

DBA_FREE_SPACE zeigt uns jetzt zwei freie Extents an, den a und den b. Wenn wir jetzt versuchen Z neu anzulegen, aber diesmal mit 12 Blöcken, dann schlägt das fehl: Oracle ist der Meinung, dass in dem File max. 11 Blöcke zusammenhängend frei sind. Wir wissen das zwar besser (a und b liegen ja direkt nebeneinander und könnten die 12 Blöcke ja aufnehmen), helfen tut uns das aber erstmal nichts.
Daher machen wir jetzt einfach den COALESCE und Oracle denkt etwas über Anfangsblock und Blockanzahl der freien Extents in DBA_FREE_SPACE nach, kommt dann zu folgendem Schluss:

XXXYYY **aaaaaaaaaaaaaa**

. Wir haben also auf wundersame Weise einen freien Extent mit 14 Blöcken generiert, und siehe da, auch unsere Tabelle Z hat wieder Platz:

XXXYYYZZZZZZZZZZZZaa

Um noch kurz auf den Resize einzugehen: Wir geben dem File jetzt noch mal (knausrig wie wir sind) zwei Blöcke dazu. Sieht dann so aus:

XXXYYYZZZZZZZZZZZZaacc

Wenn wir jetzt noch einen COALESCE machen bringen wir auch wieder eine Tabelle mit 4 Blöcken unter. Hätten wir ein zweites File angelegt sähe das jetzt so aus:

File 1: XXXYYYZZZZZZZZZZZZaa
File 2: cc

Weil ein Extent aber immer in einem File liegen muss könnten wir jetzt kopfstehen und sonstige lustige Dinge tun, die Tabelle mit 4 Blöcken bringen wir aber nicht mehr unter.

Ich hoffe das hat ein wenig Klarheit gebracht.

Weiters zum Thema RESIZE vs. ADD DATAFILE:
Vorteile von RESIZE:

  • Siehe oben
  • Keine Erhöhung der Files in der DB (wird durch einen DB-Parameter eingeschränkt)
  • einfachere Administration (zumindest mA nach)
    Vorteile von ADD DATAFILE:
  • Eventuelle Filegrössen-Beschränkungen brauchen nicht berücksichtigt zu werden
  • Load Balancing (Tuning) durch Verteilen der Datenfiles auf mehrere Datenträger möglich

Wofür du dich entscheidest hängt also eigentlich nur von deinen Prioritäten ab…

Gruß,
Martin

1 Like

Hallo Martin,

wie immer eine prima Antwort :smile:

das mit dem coalesce habe ich jetzt verstanden.

Danke

Grüße

Christian