Kompresowanie Tabeli – BASIC Compression
Kompresja podstawowa (BASIC Compression), to wbudowany mechanizm kompresji dla wersji Enterprise bazy danych Oracle. Pozwala na upakowanie dużej liczby danych w mniejszą przestrzeń, co pozwala na zaoszczędzenie miejsca na dyskach, a tym samym zoszczędzenie $.
DROP TABLE T1 / CREATE TABLE T1(id NUMBER, descr VARCHAR2(2000)) NOCOMPRESS /*default option*/ / INSERT INTO T1 SELECT ROWNUM, 'ALA MA KOTA I PSA' FROM DUAL CONNECT BY ROWNUM <= 1000000 /
SELECT compression, compress_for FROM user_tables WHERE table_name = 'T1' /
COMPRESSION COMPRESS_FOR
----------- ------------
DISABLED (null)
BEGIN dbms_stats.gather_table_stats(USER, 'T1'); END; / SELECT bytes/1024/1024 AS used_spaced_mb, blocks FROM dba_segments WHERE segment_name = 'T1' /
USED_SPACE_MB BLOCKS
------------- ------
31 1984
Powyższe, wyniki wskazują, że dla nieskompressowanej tabeli T1 z 1 mln rekordów dane zajmują 31MB.
Włączenie kompresji na tabeli możemy zrealizować dwojako:
- włączenie tylko dla nowych danych
- włączenie dla istniejących i nowych danych
--Wlaczenie kompresji TYLKO dla nowych rekordow ALTER TABLE T1 COMPRESS / --Wlaczenie kompresji dla istniejacych i nowych danych ALTER TABLE T1 MOVE COMPRESS /
Po wykonaniu polecenia z MOVE COMPRESS widać doskonale jak dużo miejsca udało się oszczędzić.
COMPRESSION COMPRESS_FOR
----------- ------------
ENABLED BASIC
USED_SPACE_MB BLOCKS
------------- ------
11 704
Należy pamiętać jednak, że podstawowa kompresja (BASIC Compression) ma swoje ograniczenia:
- Kompresję podstawową najlepiej wykorzystywać przy danych archiwalnych, co do których dostęp będzie sporadyczny i żadne operacje DML nie będą miały miejsca
- Jeżeli tak skompresowane dane zostaną zmienione instrukcją DML, kompresja na tych danych nie będzie ich uwzględniać
- Aby wstawić rekord do tabeli skompresowanej należy użyć polecenia INSERT z hintem APPEND. W innym przypadku wstawiany rekord nie będzie skompresowany
- Kompresja podstawowa najlepiej sprawdza się przy środowiskach typu OLAP
Wszystkie te ograniczenia nie będą miały miejsca jeżeli skorzysta się z kompresji zaawansowanej Advance Compression, ale wymaga ona zakupienia dodatkowej licencji, która kosztuje krocie.
O tym, jak dużo miejsca można zyskać korzystając z kompresji można oszacować z wykorzystaniem pakietu DBMS_COMPRESSION. Zapraszam do lektury Szacowanie Współczynnika Kompresji Danych.
Szymon