Sepetiniz

Data Pump ile yedeklerin sıkıştırılması

Oracle 11g versiyonundan itibaren Data Pump “compression” parametresi ile yedeklerin dump dosyasına yazılmadan önce sıkıştırılmasına olanak sağlamaktadır. 

Compression parametresi 4 değer almaktadır.  Bunlar :

  • ALL : Veri ve metadata bilgisinin sıkıştırılması sağlanıyor.
  • DATA_ONLY : Sadece verinin sıkıştırılması sağlanıyor.
  • METADATA_ONLY : Sadece metada bilgisinin sıkıştırılması sağlanıyor.
  • NONE : Herhangi bir sıkıştırma yapılmıyor. Varsayılan değerdir.

Data Pump ile compression özelliğinin kullanımı için veritabanı compatible parametresinin en az 11.0.0 olması gerekmektedir. METADATA_ONLY için 10.2 olarak da kullanılabilir. ALL ya da DATA_ONLY şeklinde kullanımı için veritabanınız Enterprise Edition olması gerekmektedir.  Oracle Advanced Compression özelliği Standard Edition One (SE2) ile kullanılamaz.

Kullanımı aşağıdaki gibidir.

expdp test/test compression=all directory=export dumpfile=test.dmp

 

“ALL” şeklinde sıkıştırma 10 katına kadar yedek dosyada küçülmeye sebep olmaktadır. Ama export süresi ciddi anlamda artacaktır. Sıkıştırılmış bir yedekten import yapıldığında da yedek dosyaları önce açılacağından import süresi de ciddi olarak artacaktır.

Ayrıca compression opsiyonu kullanımı için Advanced Compression Option lisansına ihtiyaç vardır. Herhangi bir yedek sıkıştırılarak alındığında aşağıdaki sorgudan tespit edilen COMPRESSCNT sayısı artmaktadır. Bu şekilde bu özelliği kullanıp kullanmadığınızın tespiti yapılabilir.

 

SQL> select utlname, COMPRESSCNT from ku_utluse where utlname = 'Oracle Utility Datapump (Export)';

UTLNAME                                            COMPRESSCNT
-------------------------------------------------- ----------
Oracle Utility Datapump (Export)                   597

 

 

ColumnStore Index’lerinizi COLUMNSTORE_ARCHIVE Opsiyonu ile Arşivlerken Sıkıştırın

COLUMNSTORE_ARCHIVE opsiyonu SQL Server 2014 ile beraber geldi. ColumnStore Index’leri arşivlemek istersek bu opsiyon ile arşivleme yaparken columnstore index’lerimizi sıkıştırabiliriz. ColumnStore Index’ler hakkında detaylı bilgi almak için “ColumnStore Index Nedir ve Nasıl Kullanılır?” isimli makaleme göz atmak isteyebilirsiniz.

 

Aşağıdaki script yardımıyla bu işlemi gerçekleştirebiliriz.

ALTER INDEX ColumnStoreIndexIsmi ON TabloIsmi 
REBUILD 
WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE); 

 

Arşivlediğimiz columnstore index’leri tekrar eski haline getirmek için de aşağıdaki script’i kullanabilirsiniz.

ALTER INDEX ColumnStoreIndexIsmi ON TabloIsmi 
REBUILD 
WITH (DATA_COMPRESSION = COLUMNSTORE);

 

 

Hybrid Columnar Compression

Hybrid Columnar Compression (HCC) , Oracle Database 11g Release 2 ile gelen , Exadata storage, Pillar Axiom storage systems ve Sun ZFS storage appliance  ile kullanılabilen bir özelliktir.

Hybrid Columnar Compression
Hybrid Columnar Compression

HCC kullanarak tabloları, 10 kattan 50 kata kadar sıkıştırmak mümkündür. HCC kullanılan tablolarda veriler , daha iyi sıkıştırma ve tekilleştirme yapabilmek için kolon sırasında tutulur. Aşağıdaki resimde farklılık belirtilmiştir.

Row store ile column store farkı
Row store ile column store farkı

Kolon sıralama şeklinde veri tutulması normalde performansa olumsuz etkisi vardır. Fakat HCC özelliği ile tablolar parçalara ayrılarak bu dez avantaj çok ciddi bir avantaja dönüştürülmüş olup, i/o işlemlerinde çok ciddi kazanım sağlamaktadır. Ayrılmış bu parçalara compression unit adı verilir. Her compression unit , satırların bir alt kümesini içerir ve kolon sırasına göre düzenlenmiştir. Compression unit’ler veritabanı bloklarından daha büyüktür. CU boyutu 32K ile 256K arasında değişmektedir. Genel olarak 32K civarlarındadır.

compression unit

Hybrid Columnar Compression Tipleri :

İki tip HCC bulunmaktadır.

  1. Warehouse Compression : Depolama alanındaki azalmayı bir performans artışı ile birlikte sağlamayı hedefler. Hız için optimize edilmiştir. Verinin disk üzerinde 10 katına kadar daha az yer kaplamasına olanak sağlar. Tarama için yapılan I/O da 10 katına kadar azalma sağlar. Smart Scan özelliği için optimize edilmiştir.
  2. Archive Compression : Daha fazla sıkıştırma yapabilecek şekilde optimize edilmiştir. 15 kattan 50 kata kadar daha az depolama alanında kazanım sağlayabilir. Geçmişe yönelik veri içeren tablolar için idealdir.

Her iki tip için de sıkıştırma seviyesini belirleyen LOW ve HIGH şeklinde kullanım mümkündür.

HCC ile LZO, ZLIB, ve BZ2 şeklinde sıkıştırma algoritmaları kullanılır. Bunlardan LZO en yüksek sıkıştırmayı sağlar.

Sıkıştırılmış tablo oluşturmak :

HCC kullanılan tablo oluşturmak için aşağıdaki komutları kullanabiliriz. 

Warehouse Compression için :

CREATE TABLE emp (…)
COMPRESS FOR QUERY [LOW | HIGH];

Archive Compression için:

CREATE TABLE emp (…)
COMPRESS FOR ARCHIVE [LOW | HIGH];

HCC ile sıkıştırmanın sonradan aktifleştirilmesi :

HCC olmayan bir tabloyu da sonradan sıkıştırmak mümkündür. Bunun için aşağıdaki komutları kullanabiliriz.

HCC olmayan bir tabloda HCC ile şıkıştırmanın aktifleştirilmesi için :

ALTER TABLE emp COMPRESS FOR QUERY [LOW | HIGH]; 
ALTER TABLE emp COMPRESS FOR ARCHIVE [LOW | HIGH];

Eğer sıkıştırma da yapılmak istenirse sonrasında aşağıdaki gibi tablonun move edilmesi gereklidir .

ALTER TABLE emp MOVE;

HCC olmayan bir tabloda HCC ile şıkıştırmanın aktifleştirilip, aynı zamanda sıkıştırmak için :

ALTER TABLE emp MOVE COMPRESS FOR QUERY [LOW | HIGH]; 
ALTER TABLE emp MOVE COMPRESS FOR ARCHIVE [LOW | HIGH];

Tablodaki sıkıştırma işlemi move ile yapılırsa , tablodaki indeksler unusable duruma gelecektir. Bu indekslerin rebuild yapılması gerekmektedir.

Bir tablodaki HCC sıkıştırmasının kapatılması :

Bir tablodaki HCC sıkıştırma işlemini ,  aşağıdaki komut ile kapatabiliriz.

ALTER TABLE emp NOCOMPRESS;

 

 

Compression Advisor :

Compression Advisor ile Exadata donanımında olmayan veritabanlarında , HCC ile ne kadar sıkıştırma yapabileceğimizi görmemizi sağlar. DBMS_COMPRESSION isminde plsql paketi ile kullanım mümkündür. Bunun için 8896202 numaralı yamanın uygulanması gerekmektedir.

Öneriler :

HCC kullanılan tabloların exportu alındığında yine HCC sıkıştırması ile alınmaktadır. Bu tarz tabloları Exadata olmayan bir donanımdaki veritabanına import etmeye çalıştığınızda ORA-64307 hatası alınacaktır. Sorunsuz import işlemi için bu tabloların dönüştürülerek import edilmesi gerekmektedir. Sorun yaşamamak için import işlemini transform=segment_attributes:n:table parametresi ile çalıştırmak gerekmektedir.

Çok sık update insert delete yapılan işlemlerde HCC kullanılmamalıdır.

HCC kullanılan veritabanlarının standby veritabanları da yine HCC yapılabilen veritabanlarında olacağından , Exadata üzerindeki HCC kullanılan bir veritabanının Exadata olmayan bir donanım üzerinde standby veritabanı oluşturulamaz. Bunun için Exadata tarafında HCC özelliğini kullanmamanız gerekmektedir.