4 min read

Segmente und Extents in Oracle-Datenbanken

Segmente und Extents in Oracle-Datenbanken
Photo by Lisa Yount / Unsplash

Segmente und Extents spielen in Oracle-Datenbanken bei der Speicherung und Organisation von Daten eine zentrale Rolle. Beide Konzepte sind eng mit der Art und Weise verbunden, wie Tablespaces verwaltet werden – insbesondere im Vergleich zwischen Dictionary Managed Tablespaces (DMT) und Locally Managed Tablespaces (LMT). In diesem Artikel erkläre ich diese Begriffe, beleuchte ihre Bedeutung in den unterschiedlichen Tablespace-Typen und gehe auf potenzielle Probleme ein, die bei kleinen Blockgrößen auftreten können. Die Erklärungen basieren auf den grundlegenden Prinzipien der Oracle-Architektur.

Was ist ein Segment?

Ein Segment ist eine logische Speichereinheit in einer Oracle-Datenbank, die alle Daten für ein spezifisches Datenbankobjekt enthält, wie z. B. eine Tabelle, einen Index, eine Partition oder ein LOB (Large Object). Es stellt die höchste Ebene der Datenorganisation dar und besteht aus einem oder mehreren Extents. Jedes Segment wird in einem Tablespace abgelegt und wird dynamisch zugewiesen, wenn Daten hinzugefügt werden. Oracle unterscheidet verschiedene Segment-Typen, wie z. B. Data-Segmente für Tabellendaten oder Index-Segmente für Indizes. Die Größe und Verteilung eines Segments hängen vom Tablespace-Management ab, was zu unterschiedlichen Effizienzen in der Speicherzuweisung führen kann.

Was ist ein Extent?

Ein Extent ist eine kontinuierliche Gruppe von Datenblöcken (Data Blocks), die die grundlegende Einheit der Speicherzuweisung darstellt [1]. Extents sind die Bausteine eines Segments: Wenn ein Segment wächst, fordert es neue Extents an, um zusätzliche Daten aufzunehmen. In Oracle können Extents variabel oder uniform groß sein, abhängig vom Tablespace-Typ. Die minimale Extent-Größe beträgt in der Regel 64 KB in system-managed Szenarien, aber sie kann je nach Konfiguration variieren. Die Zuweisung von Extents erfolgt algorithmisch, und Oracle optimiert dies, um Fragmentierung zu minimieren.

Dictionary Managed Tablespaces (DMT)

In Dictionary Managed Tablespaces wird die Extent-Verwaltung zentral im Data Dictionary der Datenbank gehandhabt [2]. Hier speichert Oracle Informationen über freie und belegte Extents in Tabellen wie FET$ (Free Extent Table) und UET$ (Used Extent Table) im SYSTEM-Tablespace. Wenn ein Segment einen neuen Extent benötigt, sucht die Datenbank im Dictionary nach verfügbarem Speicherplatz und aktualisiert diese Tabellen entsprechend.

Diese Methode hat folgende Bedeutung:

  • Flexibilität: Extents können variabel groß sein, was für kleine Objekte effizient ist.
  • Nachteile: Jede Zuweisung oder Freigabe erfordert Updates im Dictionary, was zu Konkurrenz (Contention) und Performance-Einbußen führen kann, insbesondere in hochbelasteten Umgebungen. Zudem kann es zu Fragmentierung kommen, da freie Extents nicht immer optimal kombiniert werden. DMT wird heute selten empfohlen und ist vor allem in älteren Oracle-Versionen üblich. Die minimale Extent-Größe beträgt hier zwei Datenblöcke [3].

Locally Managed Tablespaces (LMT)

Im Gegensatz dazu verwalten Locally Managed Tablespaces die Extents lokal innerhalb des Tablespaces selbst, unter Verwendung von Bitmaps. Diese Bitmaps – kleine Strukturen im Tablespace-Header – markieren freie und belegte Blöcke, ohne das Data Dictionary zu belasten. Es gibt zwei Modi: AUTOALLOCATE (Oracle bestimmt die Extent-Größen automatisch) und UNIFORM (feste Extent-Größen).

Die Bedeutung von LMT ist vor allem in der Skalierbarkeit und Performance:

  • Vorteile: Reduzierter Overhead, da keine Dictionary-Updates nötig sind [4]. Fragmentierung wird minimiert, insbesondere bei uniformen Extents, da alle Extents gleich groß sind und freier Speicherplatz leicht wiederverwendet werden kann. LMT ist der Standard in modernen Oracle-Versionen und empfohlen für neue Tablespaces.
  • Nachteile: Weniger Flexibilität bei variablen Extent-Größen; in AUTOALLOCATE-Modus verwendet Oracle eine Formel für optimale Größen. Zudem wird der verwendete Speicher nicht im Dictionary protokolliert, was bei Analysen den Zugriff auf den Segment-Header erfordert.

Vergleich: Bedeutung von Segments und Extents in DMT vs. LMT

Segmente und Extents sind in beiden Tablespace-Typen die Kernstrukturen, aber ihr Management unterscheidet sich grundlegend:

  • In DMT: Die zentrale Verwaltung führt zu mehr Overhead bei der Extent-Zuweisung, was Segments mit vielen kleinen Extents ineffizient macht. Dies kann zu Performance-Problemen bei großen Datenmengen führen, da jede Operation das Dictionary belastet.
  • In LMT: Die lokale Bitmap-Verwaltung macht die Extent-Zuweisung schneller und skalierbarer [5]. Segments wachsen effizient, und die Wahrscheinlichkeit von Fragmentierung sinkt, was besonders bei großen Tablespaces von Vorteil ist. Oracle empfiehlt den Wechsel zu LMT für bessere Wartbarkeit.

Insgesamt fördert LMT eine robustere und performantere Datenbankumgebung, während DMT für spezielle Legacy-Szenarien erhalten geblieben ist.

Probleme mit kleinen Blockgrößen

Kleine Blockgrößen (z. B. 2 KB oder 4 KB) können in Oracle-Datenbanken verschiedene Herausforderungen verursachen, unabhängig vom Tablespace-Typ, aber besonders in DMT:

  • Fragmentierung: Bei kleinen Blöcken entstehen viele kleine Extents, was zu externer Fragmentierung führt – freier Speicher ist verteilt und schwer nutzbar. In DMT muss Oracle kontinuierlich nach passenden Extents suchen und kombinieren, was Zeit kostet.
  • Overhead und Performance: Mehr Extents pro Segment bedeuten mehr Metadaten-Management. In LMT mit AUTOALLOCATE kann dies zu suboptimalen Zuweisungen führen, und in Systemen mit Blöcken kleiner als 32 KB ist die minimale Extent-Größe in DMT auf zwei Blöcke beschränkt, was Ineffizienzen verstärkt [6]. Dies resultiert in höherem I/O-Overhead und langsameren Operationen wie INSERTs oder Scans.
  • Speicherverschwendung: Kleine Blöcke können zu interner Fragmentierung führen, wo Blöcke nicht voll genutzt werden. Bei vielen kleinen Objekten wächst die Anzahl der Extents exponentiell, was die Datenbankverwaltung kompliziert
  • Empfehlung: Für Produktionsumgebungen werden größere Blockgrößen (z. B. 8 KB oder 16 KB) empfohlen, um diese Probleme zu mildern. In LMT helfen uniforme Extents, die Auswirkungen zu reduzieren.

Fazit

Segments und Extents sind fundamentale Bausteine der Oracle-Speicherarchitektur, deren effiziente Verwaltung durch den Tablespace-Typ bestimmt wird. Während Dictionary Managed Tablespaces eine zentrale, aber overhead-reiche Methode bieten, überwiegen die Vorteile von Locally Managed Tablespaces in modernen Szenarien durch bessere Performance und geringere Fragmentierung. Bei kleinen Blockgrößen sollten Administratoren auf potenzielle Ineffizienzen achten und ggf. zu größeren Größen oder LMT migrieren. Für detaillierte Implementierungen konsultieren Sie die offizielle Oracle-Dokumentation, um Ihre spezifische Umgebung anzupassen.

Referenzen

  1. https://docs.oracle.com/cd/B19306_01/server.102/b14220/logical.htm
  2. https://docs.oracle.com/en/database/oracle/oracle-database/18/admin/managing-tablespaces.html
  3. https://docs.oracle.com/cd/B14117_01/server.101/b10739/tspaces.htm
  4. https://blog.toadworld.com/locally_managed_tablespaces
  5. https://docs.oracle.com/en/database/oracle/oracle-database/18/cncpt/logical-storage-structures.html
  6. https://docs.oracle.com/cd/B14117_01/server.101/b10739/tspaces.htm