|
Advanced Compression mit Oracle 11g in der Praxis
von Frank Schneede, ORACLE Deutschland GmbH
Untersuchungen haben gezeigt, dass eine der größten Herausforderungen im Betrieb von Datawarehouses der Umgang mit stark wachsenden Datenmengen ist. Das Speichern
großer Datenmengen hat dabei nicht nur einen Kosten-, sondern auch einen Performanceaspekt. Daher ist es bereits seit der Oracle Datenbankversion 9.2 in der Enterprise
Edition möglich, das Datenvolumen durch den Einsatz von Komprimierung zu reduzieren. Da der Komprimierungsalgorithmus nur einen geringen Overhead erzeugt, war es
bereits mit dieser Version grundsätzlich leicht umsetzbar, Plattenspeicher einzusparen und gleichzeitig bei I/O-intensiven Abfragen durch die Minimierung der Anzahl zu lesender Blöcke
die Auswerteperformance zu steigern.
Eine Komprimierung der Daten war bis dahin allerdings nur bei folgenden Operationen nutzbar:
- BULK-Insert Operationen (auch DIRECT Load Operationen genannt)
- Manuelles Umkopieren der Tabelle
Diese Restriktionen haben dazu geführt, dass Komprimierung nicht in dem gewünschten Umfang eingesetzt wurde, weil z. B. der Ladevorgang in das Datawarehouse
keine BULK-Operationen erlaubte oder eine nachträgliche Komprimierung durch Umkopieren der Daten zu zeitaufwändig erschien. Diese Situation hat sich durch die Advanced
Compression Option in Oracle 11g entscheidend gebessert, indem nun eine Komprimierung unabhängig vom Anwendungs-Workload erfolgen kann und zusätzlich auch auf die Bereiche
andere Daten wie
- unstrukturierte Daten (mit SECUREFILE Datentyp)
- Backup-Daten (bei Nutzung des RMAN- und Datapump-Werkzeug)
- Netzwerk-Komprimierung für Data Guard
erweitert wurde.
In folgendem Tipp wird die Einfachheit des Einsatzes der Oracle 11g Advanced Compression Option für die Tabellenkomprimierung anhand zweier kleiner Beispiele demonstriert.
In den hier vorliegenden Beispielen wird von einer Datenbank mit UTF-8 Characterset und einer Blockgrösse von 8192 Bytes, also in Datawarehouse-Implementierungen üblichen 8k, ausgegangen.
Der Grad der möglichen Platzersparnis durch Komprimierung ist natürlich von der Art der gespeicherten Daten abhängig. In dem hier vorgestellten Beispiel wird eine kleine Testtabelle
angelegt. Im Data Dictionary ist ersichtlich, dass diese Tabelle zur Zeit nicht komprimiert wird:
Im ersten Schritt wird die angelegte Testtabelle nun mit Daten versorgt. Man sieht durch Abfrage des Data Dictionary, dass die gesamten eingefügten Datensätze in einen einzigen
Block hinein passen:
Durch das Hinzufügen eines einzelnen weiteren Datensatzes muss ein neuer Block allokiert werden:
Im nächsten Schritt soll die Tabelle auf Komprimierung umgestellt werden, wobei eine Komprimierung bei jedem Workload erfolgen soll. Die Umstellung
lässt sich sofort im Data Dictionary verifizieren:
Der Oracle Enterprise Manager 11g Database Control verfügt ebenfalls über eine Anzeige, in der die Komprimierungseinstellungen für Datenbankobjekte
kontrolliert und ggf. verändert werden können:
|
| Für eine größere Ansicht auf das Bild klicken |
Anschließend werden weitere Daten in die Tabelle eingefügt und die Auswirkung im Data Dictionary kontrolliert. Man erkennt, dass
der bereits allokierte erste Block dadurch nicht verändert wird. Die Komprimierung erfolgt lediglich für den nach der Umstellung noch nicht vollständig gefüllten Block,
der durch die Komprimierung allerdings wesentlich mehr Daten aufnehmen kann. Die hier erreichte Einsparung berechnet sich durch die Formel
saving = round((uncompressed - compressed) * 100 / uncompressed), es ergibt sich also konkret round((640 - 480) * 100 / 640) = 24% Platzersparnis:
Das Beispiel zeigt, dass eine Komprimierung nur beim Füllen eines Blockes erfolgt, einmal vollständig gefüllte Blöcke werden nicht mehr verändert.
Es muss also durch eine DELETE-Operation Platz im Block geschaffen werden:
Durch das Einfügen von weiteren Daten ist es nun möglich, dass der erste Block ebenfalls komprimiert wird und ebenfalls mehr Daten aufnehmen kann:
Das obige Beispiel zeigt sehr plastisch die Arbeitsweise der Advanced Compression Option und deren Effekt in Bezug auf die Platzersparnis. Sobald in einer Tabelle
noch Bewegung ist, greift die Komprimierung - wenn die Tabelle oder Partitionen davon jedoch historischen Inhalt haben und damit statisch sind, so ist hier ein
Administratoreingriff, zum Beispiel Umkopieren der Tabelle bzw. Partition, erforderlich, um die gewünschte Platzersparnis zu realisieren.
Im zweiten Beispiel wird der Effekt des Einsatzes der Advanced Compression Option auf I/O-Durchsatz und somit auf die Performance untersucht. Hierzu werden zwei
in der Struktur identische Tabellen angelegt, die erste komprimiert, die zweite nicht:
Die beiden Tabellen werden nacheinander über ein Skript mit Testdaten versorgt. Das Skript ist so gestaltet, dass der Name der Tabelle, bzw. hier die Erweiterung
REG oder COMP durch eine Substitutionsvariable versogt
wird:
Nach einem ersten Durchlauf kann man den Füllgrad der Tabellen leicht abfragen, aufgrund der Charakteristik der Daten erhält man hier allerdings nach der bereits oben
beschriebenen Berechnungsformel (saving = round((6912 - 5632) * 100 / 6912)) nur eine Platzeinsparung von 19%, diese Rate erhöht sich nach einer weiteren Befüllung
beider Tabellen leicht auf 21% (saving = round((14336 - 11264) * 100 / 14336)):
An dieser Stelle kann jetzt die Auswirkung auf die Performance getestet werden. Dieses geschieht durch das folgende Testskript:
Die Auswertung ergibt dann folgendes Bild:
Die Messungen des oben durchgespielten Testfalls ergeben in einer Tabelle zusammengefasst folgendes Bild:
| | Reguläre Tabelle | Komprimierte Tabelle | Einsparung |
| Antwortzeit | 12,50 | 10,73 | 14,16% |
| CPU used | 883 | 869 | 1,59% |
| cr buffer gets | 22598 | 22000 | 2,65% |
| disk reads | 13413 | 11118 | 17,11% |
| elapsed time | 10485584 | 8894898 | 15,17% |
| io cost (*) | 3841 | 3013 | 21,56% |
| cpu cost (*) | 5253460351 | 4877751081 | 7,15% |
| time (*) | 50 | 39 | 22,00% |
| Die mit (*) Statistiken sind erwartete Werte, d. h. sie beruhen auf Annahmen des cost-based Optimizers! |
Man erkennt selbst bei diesem kleinen Testfall die positiven Auswirkungen des Einsatzes der Advanced Compression Option insbesondere im Bereich disk reads
(das entspricht den physikalischen Plattenzugriffen)! Die in der Realität zu erzielenden Verbesserungen hängen natürlich sehr stark vom Aufbau der
Daten und dem erreichten Einsparungsfaktor ab. Dieses kann je nach Anwendungsfall variieren und, z. B. mit einer Tabelle, die LOB-Daten enthält, bis zu 70% ausmachen!
Ein kleiner Hinweis noch zum Abschluss:
In einer der letzten Ausgaben der DOAG-News ist ein sehr interessanter weiterführender Artikel zu dem Themenkomplex Advanced Compression Option erschienen, den Sie
hier herunterladen können.
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...
Zurück zur Community-Seite
|