Frage zu Datenbankdesign Oracle

Hallo,

ich bin auf der Suche wie man bestimmt/errechnet wie groß man die Extents eines Tablespace anlegt. Leider habe ich bisher nicht allzuviel gefunden.

Konkreter Fall, ein Indextablespace soll angelegt werden localy managed etc (10g) und eine UNIFORM SIZE soll angegeben werden. der Defaultwert 1M, habe ich mir mal sagen lassen, wäre für Indizes nicht praktikabel weil eh nie der ganze Index gelesen würde (ob diese Aussage so stimmt oder nicht… ?)

Ich habe bis jetzt aber noch garnichts gefunden wie ich eine optimale Größe herausbekomme.

Wie ist das bei Datentablespaces, welche Größe nimmt man warum ?

Welches Buch könnt ihr mir empfehlen in dem so etwas detailliert drin steht (wenn´s sein muß auch in englisch)

Grüße

Chris

der Defaultwert 1M, habe ich mir mal sagen lassen,

wäre für Indizes nicht praktikabel weil eh nie der ganze Index
gelesen würde (ob diese Aussage so stimmt oder nicht… ?)

  • Was der Defaultwert für einen Extend mit dem Lesen des ganzen oder eben nicht des ganzen Indexes zu tun hat, ist mir schleierhaft. 1M extend ist sicher eine gute Ausgangsgrösse, aber du musst für DEINE applikation die Sache beurteilen, d.h. wie sieht der Wachstum über eine bestimmte Zeit aus

Wie ist das bei Datentablespaces, welche Größe nimmt man warum

  • Tablespaces haben erst mal gar keine Grösse, sondern sind Container für 1 bis n Datafiles. Wie gross die sein sollen, kann dir niemand sagen, was willst du reinspeichern ? Ich habe Datafiles, die sind 20 G gross, andere nur 10 M, so it depends…

Welches Buch könnt ihr mir empfehlen in dem so etwas
detailliert drin steht (wenn´s sein muß auch in englisch)

Tom Kyte, Expert One-on-one, und / oder Effective Oracle by Design,
guckst du hier :

http://asktom.oracle.com/pls/ask/f?p=4950:1:50675664…

Grüsse, Ueli

Hallo Uli,

  • Tablespaces haben erst mal gar keine Grösse, sondern sind
    Container für 1 bis n Datafiles. Wie gross die sein sollen,
    kann dir niemand sagen, was willst du reinspeichern ? Ich habe
    Datafiles, die sind 20 G gross, andere nur 10 M, so it
    depends…

Sorry, anscheinend mißverständlich geschrieben, es geht mir rein um die Extentgrößen…

wie ermittel ich die passende Größe für die Extents bei einer neuen Datenbank, in wieweit ist die Größe überhaupt wichtig, was hat die Größe mit dem Wachstum zu tun, gibt es Richtwerte wieviele Extents eine Tabelle/Index maximal haben sollte ?

Grüße

Chris

Hallo chris,

eigentlich muß man sich das doch in den meisten Fällen nicht mehr antun - Oracle erledigt das für dich. Stichworte Locally Managed Tablespaces, EXTENT MANAGEMENT LOCAL AUTOALLOCATE…

HTH, muzel

Hallo Chris,

wie ermittel ich die passende Größe für die Extents bei einer
neuen Datenbank, in wieweit ist die Größe überhaupt wichtig,
was hat die Größe mit dem Wachstum zu tun, gibt es Richtwerte
wieviele Extents eine Tabelle/Index maximal haben sollte ?

Um beurteilen zu können, wie groß du deine Extents anlegen solltest musst du dir die Auswirkungen bestimmter Eigenschaften von Extents vor Augen halten:

Vorteil kleiner Extents:

  • Wenig verschenkter Platz auf der Platte

Vorteile großer Extents:

  • Wenig Overhead für das Anlegen von neuen Extents
  • Geringere Fragmentierung der Segmente

Vorteile von automatisch verwalteten Extents:

  • Weniger Aufwand für DBA

Vorteile von manuell getuneten Extents:

  • Potentiell bessere Effizienz

Daraus abgeleitet verwenden wir bei uns eine Strategie, die pro Tablespace immer eine einheitliche Uniform-Extent Größe definiert. Bei der Anlage der Segmente werden diese so dimensioniert, dass der Platz grob gerechnet für drei bis fünf Jahre reicht (danach kommt ohnehin wieder einmal ein neuer Server oder ich krieg die DB aus irgendwelchen anderen Gründen wieder zwischen die Finger, sodaß ich eventuell nötige Anpassungen vornehemen kann). Die Aufteilung auf Tablespaces erfolgt nach mehreren Gesichtspunkten, darunter vor allem die Trennung Tables/Indices und eine Aufteilung nach „Art“ der Daten (Segmente die kontinuierlich wachsen, solche, die streng statisch bleiben und solche, wo abwechselnd Sätze dazu und wieder weg kommen).

Die Anzahl der Extents ist mittlerweile kaum mehr ein Kriterium, allerdings halte ich es für einen guten Plan die Segmente bereits von Anfang an so zu dimensionieren, dass nicht später die Extents quer über das/die Datenfile/s (d.h. in Folge dann natürlich auch die Platte) verteilt sind.

Zu deiner Frage bezüglich Full Index Scans: Die gibt es sehr wohl, nämlich dann, wenn du nur Spalten verwendest, die im Index enthalten sind (wozu sollte er dann auch noch in der Tabelle nachlesen). Öfter kommt das vor bei Auswahllisten: Ich will z.B. eine Adresse aus einer Liste auswählen und zeige dafür einen Matchcode an, auf den ein Index existiert: In dem Fall kann die DB für das Lesen der Auswahlliste einfach den Index über den Matchcode nehmen.

HTH
Martin

1 Like

Hallo Martin,

Ich danke dir für die ausführliche Antwort !

Also wenn ich dich richtig verstanden habe, dann sind doch eher größere Extents besser als kleine. Von der Autoallokate-Klausel halte ich persönlich nicht viel, da man nur mit viel Aufwand abschätzen kann wann ein Tablespace voll läuft.

Du schreibst man sollte die Segmente von vorneherein groß genug wählen, heist das das du jeder Tabelle beim Anlegen gleich Extents allokierst unter Abschätzung des Wachstums ?

Grüße

Chris

Hallo Chris,

Also wenn ich dich richtig verstanden habe, dann sind doch
eher größere Extents besser als kleine.

Abgesehen vom (eventuell unnötig hohen) Platzverbrauch ja.

Von der
Autoallokate-Klausel halte ich persönlich nicht viel, da man
nur mit viel Aufwand abschätzen kann wann ein Tablespace voll
läuft.

Da gebe ich dir 100 %-ig recht.

Du schreibst man sollte die Segmente von vorneherein groß
genug wählen, heist das das du jeder Tabelle beim Anlegen
gleich Extents allokierst unter Abschätzung des Wachstums ?

Ja. Ich gebe also z.B. einer Table mit uniform extent size 8 MB, von der ich weiss, dass sie voraussichtlich 16 MB brauchen wird von vorneherein auch gleich diese 16 MB, sprich zwei Extents.

Gruß
Martin

Hallo zusammen,

Von der
Autoallokate-Klausel halte ich persönlich nicht viel, da man
nur mit viel Aufwand abschätzen kann wann ein Tablespace voll
läuft.

Da gebe ich dir 100 %-ig recht.

Mag ja richtig sein, wenn ich in etwa weiß, was mich erwartet - bei relativ unveränderlichen oder langsam/kontinuierlich wachsenden Objekten. Nur: wenn ich eine Datenbank neu aufsetze und erst einmal Informationen sammeln muß, wie sich das Ding entwickelt, ist die Autoallocate-Variante doch gar nicht so schlecht? „Gruppenweise“ uniforme Extents, deren Größe sich schrittweise an die Erfordernisse anpaßt… Und irgendwann (wenn’s sein muß regelmäßig) bau ich die Datenbank neu auf, mit optimierten Speicherparametern.
Gruß, m.

Hallo muzel,

Von der Autoallokate-Klausel halte ich persönlich nicht viel, da man
nur mit viel Aufwand abschätzen kann wann ein Tablespace voll
läuft.

Da gebe ich dir 100 %-ig recht.

Mag ja richtig sein, wenn ich in etwa weiß, was mich erwartet

  • bei relativ unveränderlichen oder langsam/kontinuierlich
    wachsenden Objekten. Nur: wenn ich eine Datenbank neu aufsetze
    und erst einmal Informationen sammeln muß, wie sich das Ding
    entwickelt, ist die Autoallocate-Variante doch gar nicht so
    schlecht?

Ich bin vermutlich in Bezug Akribie bei der Abfolge Analyse - Design - Implementierung etwas extrem, aber den Fall, dass ich die DB aufsetzen muss, um herauszufinden was (insbesondere wieviel) ich darin abspeichere halte ich schon fast für verbrecherisch. Das ist jetzt vielleicht bei den Extent-Größen tatsächlich noch relativ egal, bei einer aktuellen (also 10g) Oracle DB müsste ich da schon fast absichtlich Mist bauen, um die Performance in die Knie zu zwingen. Allerdings hat das in anderen Design-Bereichen so grundlegende Auswirkungen, dass ich als Nebenprodukt die Extent-Größen auch gleich noch „richtig“ machen kann - weil ich das eben ohnehin wissen muss.

„Gruppenweise“ uniforme Extents, deren Größe sich
schrittweise an die Erfordernisse anpaßt… Und irgendwann
(wenn’s sein muß regelmäßig) bau ich die Datenbank neu auf,
mit optimierten Speicherparametern.

Das effektivste Tuning kannst du im Design betreiben, alles was danach noch kommt sind Fehlerkorrekturen. Da wäre es doch intelligenter gleich mal die Fehler wegzulassen, oder? :wink:

Gruß
Martin