Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  2/2009  Pfeil  Datenbanken
suche: 
Dieser Artikel wendet sich an Datenbankadministratoren und Entwickler, die einen Einblick in den Funktionsumfang der Datenkompression in Oracle erhalten möchten.

Glossar

ASM
Automatic Storage Management. ASM ist ein im Oracle Kernel integrierter Volume Manager. Er ist ab Oracle 10g verfügbar und arbeitet nach dem SAME-Prinzip (stripe and mirror everything). ASM kann als zentraler Storage für RAC-Systeme verwendet werden.
DML
Data Modification Language. Über DML-Kommandos werden Daten (Zeilen) in Tabellen eingefügt, gelöscht oder geändert.
LOB
Large Object. Datentyp zur Aufnahme großer Datenmengen. LOB ist der Sammelbegriff für alle Large Objects, wie BLOB, CLOB, NCLOB und BFILE.
OLTP
Online Transaction Processing. Oft handelt es sich hierbei um Multiuser- Anwendungen zur Datenerfassung oder -aktualisierung, die sehr kurze Antwortzeiten verlangen.
XML
Extensible Markup Language (XML). XML ist eine so genannte Meta-Sprache zur Beschreibung von Dokumenten. Ein Vorteil von XML ist der vereinfachte Austausch von Daten, da XML-Formate in einer strengen Grammatik definiert werden können, und so die Implementierung von zuverlässigen Schnittstellen erlaubt.


Oracle Database 11g Release 1 (Teil VI)

Compression, weniger ist mehr

Bereits in der Oracle-Version 9i wurde Tabellenkomprimierung für Bulk-Operationen eingeführt. In unserem ORDIX News Artikel "Datenkompression unter Oracle" [1 + 2] haben wir diese Funktion ausführlich vorgestellt. Mit Oracle 11g wird die Tabellenkomprimierung durch die Einführung der Advanced Compression erweitert. So kann diese Funktionalität jetzt auch bei OLTP-Anwendungen genutzt und damit fundamental verbessert werden. Eine Historie der verschiedenen Funktionen zur Datenkompression finden Sie vorab in Abbildung 1.

Oracle Feature verfügbar ab Version
Index Compression 8i
IOT Compression 8i
Table Compression for Direct Load 9ir
Table Compression for All Operations 11g
SecureFiles 11g
Abb. 1: Historie der verschiedenen Oracle Features zur Datenkompression.
 
Abb. 2: Normaler Block vs. komprimierter Block.
Abb. 2: Normaler Block vs. komprimierter Block.
 
Abb. 3: Batch-Mode-Komprimierung bei 11g.
Abb. 3: Batch-Mode-Komprimierung bei 11g.
 
Abb. 4: Deduplikation innerhalb von SecureFiles.
Abb. 4: Deduplikation innerhalb von SecureFiles.
 

Compress for Direct Load

Durch die Option compress for direct_load operations wird die Oracle 9i R2 Compression aktiviert. Durch den starken Overhead bei der Komprimierung war diese Funktion im Wesentlichen für das Data-Warehouse-Umfeld geeignet, da bei dieser Option (direct_load) nur die Daten beim Insert komprimiert werden. Durch spätere Änderung - ausgelöst durch weitere DML-Befehle - werden die einzelnen Sätze wieder dekomprimiert. Diese Option ist somit nur für Daten sinnvoll, die geladen werden und nicht mehr bzw. kaum noch verändert werden, wie z. B. im Data-Warehouse-Umfeld.

Index & Index Organized Table Compression

Bereits seit Oracle 8i ist Index Key Compression verfügbar. Diese Art der Komprimierung kann bei B*Tree Indizes und Index Organized Tables (IOT) eingesetzt werden. Index Key Compression verringert sich wiederholende Einträge in Indexblöcken (der Leaf-Ebene). Dies kann natürlich nur bei Non-Unique Indizes zum Erfolg führen.

Wie werden Tabellen komprimiert?

Die Komprimierung erfolgt auf Blockebene. Mehrfacheinträge im Datenblock werden nur einmal gespeichert. Ein Pointer im Datenteil des Blocks referenziert auf eine Symboltabelle, in der die sich wiederholenden Werte gespeichert werden. Diese Symboltabelle befindet sich in einem dafür reservierten Bereich innerhalb des Blocks. Der restliche Platz steht den eigentlichen Daten zur Verfügung (siehe Abbildung 2).

Durch diese Methode können mehr Datensätze in einen Block geschrieben werden. Der Speicherplatz auf der Platte wird dadurch reduziert. Durch mehr Daten pro Block werden auch mehr Daten im Speicher gehalten. Das sorgt für weniger Buffer-Get-Operationen und dadurch minimiert sich die I/O- und CPU-Last beträchtlich.

Diese Methode, die bereits bei der BulkCompression-Methode von Oracle 9i verwendet wurde, wird technisch identisch ebenfalls für die neue Methode verwendet: compress for all operations

Compress for All Operations

In Oracle 11g werden mit Hilfe der Option "Advanced Compression" nun alle DML-Operationen bei Komprimierungen unterstützt. Dadurch fallen die bisherigen Einschränkungen auf Bulk-Load-Operationen weg. Die Komprimierung wird ohne Rücksicht auf die Art der Ladevorgänge garantiert. Durch den Zusatz compress for all operations wird die Methode aktiviert. Die Komprimierung erfolgt im so genannten Batch Mode. Die Daten bleiben somit bei der Befüllung des Blocks unkomprimiert. Sobald die Befüllung des Blocks die PCTFREE-Grenze erreicht hat, werden die Daten komprimiert. Neue Daten werden in umkomprimierter Form eingefügt. Beim erneuten Erreichen der PCTFREE-Grenze wird sofort das Komprimieren ausgelöst. Dieser Prozess setzt sich solange fort, bis der Block komplett mit komprimierten Daten gefüllt ist (siehe Abbildung 3).

Die Komprimierung kann auf Tablespace-, Tabellen- oder Partitionsebene eingeschaltet werden. Dies geschieht durch das entsprechende CREATE-Kommando. Die Komprimierung kann allerdings auch im Nachhinein über ein ALTER-Kommando modifiziert werden. Das nachträgliche Umsetzen führt nicht zur sofortigen Reorganisation der betroffenen Tabellen.

Die Blöcke weden immer dann komprimiert, wenn die jeweilige PCTFREE-Grenze überschritten wird. Das komplette Komprimieren von bereits existierenden Tabellen kann durch das Kommando alter table ... move realisiert werden. Eine weitere Möglichkeit bietet das Packages DBMS_Redefinition. Hiermit kann die Reorganisation ohne Sperren online erfolgen.

Die Komprimierungsrate der einzelnen Tabellen ist natürlich sehr unterschiedlich. Dies ist stark von folgenden Faktoren abhängig:

Je mehr Duplikate in einem Block innerhalb der Spalten auftreten, desto größer wird der zu erreichende Effekt der Komprimierung sein.

Komprimierung von Large Objects mitSecureFiles

Unstrukturierte Daten (XML, DOC, PDF) sind sehr speicherintensiv. Eine Komprimierung ist hier sehr sinnvoll. In Oracle 11g ist die Funktionalität "Oracle SecureFiles" hinzugekommen. Oracle SecureFiles ist ein optimierter Speichermechanismus für LOB-Daten. Durch den Zusatz store as securefile im Kommando create table kann diese Funktion genutzt werden. Die folgenden beiden Einstellungen zur Komprimierung sind möglich:

Die LOB-Komprimierung wird durch die SecureFile-LOB-Storage-Klausel angegeben. Basic-Files, die herkömmliche Speichermethode für LOBs, können mit dieser Methode nicht komprimiert werden. SecureFiles können nur in Verbindung mit Automatic Segment Space Management (ASSM) [3] genutzt werden. Die Komprimierung erfolgt für den Anwender transparent und kann beliebig mit anderen Oracle-Technologien, wie RAC, Automatic Storage Management (ASM) [4] oder Partitioning, kombiniert werden.

Fazit

Schon seit Oracle 8i kann die Funktion "Index Key Compression" eingesetzt werden. Table Compression findet seit Oracle 9i Verwendung. Gerade im Data-Warehouse-Umfeld zählt Compression seit langer Zeit zu den Schlüsselfunktionen. Mit Advanced Compression sind diese um wichtige Funktionen erweitert worden. Die Verbesserungen machen die Komprimierung unabhängig vom Application Workload. Dadurch wird die Komprimierung nun auch zu einem wichtigen Feature für den OLTP-Betrieb. Mit SecureFiles wird es nun auch möglich, unstrukturierte Daten zu komprimieren. Die Praxis zeigt, dass der Mehrwert der Komprimierung meist unterschätzt wird. Ein kleiner Wermutstropfen bleibt allerdings: Die Funktion Advanced Compression unter Oracle 11g ist lizenzpflichtig.

Klaus Reimers (info@ordix.de).