Als PDF Downloaden!

Werbung
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
Herunterladen