Bu yazıda SQL Server 2012 ile birlikte desteklenen sıkıştırma metotları incelenecektir.
SQL Server 2012 ile birlikte önceki sürümde de desteklenen RAW ve PAGE seviyesinde veri sıkıştırma yöntemleri, tablo ve indexler için desteklenmektedir. Herhangi bir sıkıştırma metodu kullanılarak I/O duyarlı uygulamaların performansı arttırılırken yer kazancı sağlanabilmektedir. Bu sayede aynı veri daha az sayfada tutulacak ve sorgularda daha az sayfa sorgulanacaktır.
Tüm bu işlemlerin aynı zamanda var olan CPU performansını düşüreceği unutulmamalıdır. Bu sebeple var olan veri tabanı altyapısı için hangi sıkıştırma metodunun kullanılacağı ve hangi tabloların sıkıştırılması gerektiği uygun bir strateji ile belirlenmelidir.
Resim-1
Bu yazıda SQL Server 2012 ile birlikte sunulan iki farklı veri sıkıştırma metodu arasındaki temel farklar incelenecektir.
ROW Sıkıştırma:
Page sıkıştırma yöntemine göre daha az alan kazancı sağlayan ancak bunu daha fazla CPU performansı sunarak gerçekleştirilen bu metot ile Null ya da 0 değerleri sayfa içerisinde tutulmaz. Aynı zamanda belirli veri tipleri için kullanılabilecek en az alanı kullanmaya çalışarak yer kazancı sağlar.
Örneğin AABB isimli bir değerin CHAR(10) veri tipi kolonunda saklandığını düşünelim. Varsayılanda bu değer disk üzerinde 10 Byte yer kaplayacaktır. ROW Sıkıştırma ile kapladığı yer 4 Byte’a düşürülebilir.
http://msdn.microsoft.com/en-us/library/cc280576.aspx linkindeki tabloda farklı veri tiplerinin ROW sıkıştırmadan nasıl etkilendikleri incelenmiştir.
PAGE Sıkıştırma:
Page sıkıştırma yöntemi kullanıldığında 3 farklı operasyon ile sıkıştırma işlemi gerçekleştirilir:
- Row Sıkıştırma: Yukarıda bahsedilen sıkıştırma yöntemi uygulanır.
- Prefix Sıkıştırma: Bu yöntem ile birlikte her bir kolonda tutulan veriler incelenir ve prefix olarak kullanılabilecek değerler belirlenir. Her bir kolon içerisinde prefix olarak kullanılabilecek satırlar Compression Information Structure (CIS) adı verilen sayfada tutulur. Bu sayede kolon içerisinde tekrarlanan tüm veriler için uygun prefix numarası ataması gerçekleştirilir ve verinin tamamı yerine referans edilen bölümleri tutulur.
Yukarıdaki sıkıştırma yöntemini bir örnek ile inceleyelim. Aşağıdaki gibi bir kolon içerisinde tekrarlanan verilerin olduğunu düşünelim.
Resim-2
Prefix sıkıştırma uygulandıktan sonra tekrarlanan veriler için Prefixler oluşturulur ve bu veriler CIS içerisinde saklanır. Son durumda oluşturulan Prefixler ve satırlar içerisinde verilen referanslar aşağıdaki gibi olacaktır.
Resim-3
Görüldüğü gibi AAA, CCC ve BB tekrarlanan verileri Prefix olarak oluşturulmuş ve 0,1,2 değerleri atanmıştır. Ardından tüm veriler üzerinde yalnızca Prefix referans numarası atanarak tutulan veri boyutunda önemli ölçüde kazanç sağlanmıştır.
- Dictionary Sıkıştırma: Prefix sıkıştırma sonrasında son olarak Dictionary sıkıştırma yöntemi uygulanır. Bu yöntemde Prefix sıkıştırmadan farklı olarak sayfanın herhangi bir yerindeki tekrarlayan veriler de referanslar ile değiştirilir. Tekrarlanan verinin değerin başında, ortasında ya da sonunda olması fark etmeyecektir.
Yukarıdaki sütun üzerinde uygulandığında aşağıdakine benzer bir sonuç elde edilecektir.
Resim-4
Verilerin sonunda tekrarlayan CD değeri, CIS içerisine eklenmiş ve içerideki verilerde referans numarası olarak 4 kullanılmıştır. Böylece ilk veri 04 haline gelmiş, bir önceki sıkıştırma yönteminden daha fazla yer kazancı sağlanmıştır.
Yukarıdaki bahsedilen sıkıştırma yöntemlerinin uygulanması için aşağıdaki adımlar izlenebilir:
Aşağıdaki T-SQL sorgusu ile öncelikle sp_estimate_data_compression_savings prosedürü çalıştırılır ve ROW sıkıştırma kullanıldığında tahmini nesne boyutu döndürülür. Sonrasında belirlenen tablo içerisinde ROW sıkıştırma aktif edilir.
USE AdventureWorks2012;
GO
EXEC sp_estimate_data_compression_savings ‘Production’, ‘TransactionHistory’, NULL, NULL, ‘ROW’ ;
ALTER TABLE Production.TransactionHistory REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW);
GO
DATA_COMPRESSION bölümünde ROW değeri yerine PAGE kullanılarak da diğer yöntem aktif edilebilmektedir.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar