Tipps & Tricks: August 2008 Bereich: SQL Erstellung: 08/2008 BK Versionsinfo: 11.1 Letzte Überarbeitung: 09/2009 BK OLTP Tabellenkompression Wird es wieder mal eng im Tablespace? In unserem heutigen Tipp wollen wir ein neues Feature der Oracle Datenbank 11g etwas näher vorstellen: OLTP Tabellenkompression Als Erstes ein kurzer Blick zurück. Wie wurden Tabellen bisher komprimiert? Direct Path Table Compression Wurde eingeführt mit Oracle 9i Release 2 Unterstützt Compression bei "bulk load operations"(Direct Load, Insert /* + APPEND */) Optimierter Kompressions-Algorithmus für relationale Daten Verbesserte Performance bei Abfragen die große Datenmengen abrufen Die Daten werden auf Datenblockebene komprimiert Kompression kann auf Tabellen- oder Partitionsebene eingestellt werden Kompression ist für Applikationen vollkommen transparent Spürbare Verlangsamung bei Schreiboperationen Nun zur aktuellen Neuerung in Oracle 11g OLTP Tabellenkompression Mit der aktuellen Datenbank Oracle 11g wurde die OLTP Tabellenkompression erweitert. Mit dem neuen Kompressions-Algorithmus werden auch "normale" DML Anweisungen (insert, update, delete) unterstützt. Datensätze werden im ersten Schritt unkomprimiert in die Tabellen geschrieben. Erreicht ein Datenblock die PCTFREE-Grenze wird die Kompression gezündet und der Block komprimiert. Weitere Inserts landen wieder unkomprimiert im Block bis erneut die PCTFREE-Grenze erreicht wird. Einige Vorteile kurz zusammengefasst: Standard DML Operationen werden unterstützt Keine Verlangsamung bei Schreiboperationen Ungenutzte Speicherbereiche, die durch Löschoperationen entstehen, werden bei der Komprimierung beseitigt Um OLTP Tabellenkompression nutzen zu können gilt es Folgendes zu beachten: Database compatibility level muss auf 11.1 oder höher gesetzt werden Neue Syntax erweitert die Compress Anweisung compress [for {all | direct_load} operations] DIRECT_LOAD (Default) komprimiert nur Direct Load Operationen ALL für DML und Direct Load Syntax für neue Tabellen: create table my_tab1 compress for all operations Syntax für bestehende Tabellen: alter table my_tab2 compress Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 1 von 2 Achtung! Nur neue Datensätze werden komprimiert Um die Platzersparnis zu verdeutlichen legen wir mit diesem Skript zwei Tabellen an, eine komprimiert, die andere unkomprimiert. Beide Tabellen werden auf identische Weise mit ca. 54.000 Datensätzen befüllt. Eine Abfrage auf die View USER_SEGMENTS zeigt uns, wie viel Platz durch die Komprimierung gespart werden kann. create table uncompressed as select * from all_objects where 1=2; create table compressed compress for all operations as select * from all_objects where 1=2; insert into uncompressed select * from all_objects order by owner, status, object_type; insert into compressed select * from all_objects order by owner, status, object_type; commit; select segment_name, blocks, bytes /1024 kb from user_segments where segment_name like '%COMPRESS%'; SEGMENT_NAME BLOCKS KB ------------------------------ ---------- ---------COMPRESSED 512 4096 UNCOMPRESSED 1024 8192 Weiterführende Informationen zur OLTP Tabellenkompression und weiteren Neuerungen von Oracle 11g bekommen Sie in unserer Schulung "Oracle 11g Neuerungen". Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 2 von 2