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.

 

Loading

1 Comment

  1. Ali Rıza Yılmaz says:

    Elinize sağlık.
    Güzel bir makale olmuş.
    Devamını dilerim. 😀

Leave Your Comment