1. Ana Sayfa
  2. SQL Server
  3. SQL Server 2012 – Veri Sıkıştırma Yöntemleri Nelerdir?

SQL Server 2012 – Veri Sıkıştırma Yöntemleri Nelerdir?


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ı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

Yorum Yap

Yazar Hakkında

İstanbul doğumlu ve Marmara Üniversitesi mezunudur. Mezuniyet sonrası kariyerine Bilge Adam Bilişim Teknolojileri Akademisi'nde Microsoft Certificated Trainer, Consultant ve Senior Consultant pozisyonlarında ve Data Market bünyesinde Danışmanlık Birim Müdürü olarak görev yapmaya başlamıştır. Microsoft bünyesinde tüm MEA bölgesindeki ülkelerde System Center ve Infrastructure projelerinden sorumlu Consultant olarak görev yaptıktan sonra, Aralık 2012 itibari ile KoçSistem bünyesinde danışman olarak çalışmaya başlamıştır. System Center Configuration Manager ürünü için 2010 ve 2011 yıllarında MVP (Microsoft Most Valuable Professional) ünvanı alan Anıl Erduran, 2013 yılında System Center Cloud & Datacenter Management alanında MVP seçilmiş ve uzun yıllar bu ünvanı korumayı başarmıştır. Şu anda Londra'da yaşayan Anıl Erduran AWS üzerinde çalışan Microsoft iş yüklerinden sorumlu EMEA Senior Partner Solutions Architect olarak çalışmaktadır.

Yorum Yap