Merhaba arkadaşlar,
Bu yazımda SQL Server 2008 ile beraber gelen Table ve BackUp larda ki compression yani sıkıştırma işlemlerinin nasıl yapılacağını anlatmaya çalışacağım.
İlk olarak neden sıkıştırma yaptığımıza değinelim. Büyük boyutlu mdf dosyalarının yedeğini aldığımızda oldukça büyük boyutlu yedek dosyaları oluşabilmektedir. Örneğin 2.5gb boyutundaki bir datanın yedeği 1 gb boyutlarında olabilmekte. Bu da bize storing problemi yaşatmakta.
Aynı şekilde compression işlemi sayesinde büyük boyutlu dataları sıkıştırarak daha az yer kaplamasını sağlayabilmekteyiz.
SQL Server bize 2 farklı konuda sıkıştırma şansı vermekte. Bunlar Tablo Sıkıştırması ve BackUp Sıkıştırması. Şimdi bunları anlatmaya çalışalım.
Table Compression
Data içerisindeki tabloları sıkıştırarak datanın daha az yer kaplamasını sağlayabiliriz. Tabloyu 2 türlü sıkıştırma şansımız var. Kayıt veya sayfa bazında. Heap,Clustered Index,Non-Clustered Index,Index Views ve Partition lar sıkıştırılabilmekte. Şimdi bu işlemi management studio üzerinde nasıl yapabileceğimizi görelim.
Örneğin AdventureWorks2008 database inde ki Sales.SalesOrderDetail tablosunda sıkıştırma yapalım. Bunun için management studio da tabloya sağ tıklayıp Storage kısmından Manage Compression a tıklayalım. Gelen ekrana next diyelim ve aşağıdaki ekrana geçelim.

Eğer sıkıştırma yapacağımız table birden fazla partition da ise bunları liste halinde bu ekranda görebilirsiniz.
İlk olarak Row compression un bize sağlayacağı faydaya bakalım. Bunun için Compression Type kısmından Row u seçip calculate butonuna basıyoruz.

Current Space kısmında table in şu anda kapladığı yeri, Requested Compressed Space kısmında ise Row compression yapılırsa table ın kaplayacağı yeri görebiliriz. Bu table için Row sıkıştırmasıyla %12 lik bir sıkıştırma yapabiliyormuşuz.
Şimdide Compression Type kısmından page i seçip calculate basalım. Gördüğünüz gibi page sıkıştırması bu table için daha iyi bir sonuç veriyor ve yaklaşık olarak %32 lik bir sıkıştırma sağlıyor.
Sıkıştırma tipine karar verdikten sonra next e basıyoruz ve aşağıdaki ekrana geçiyoruz.

Buradaki seçeneklere değinecek olursak;
Create Script : Bu işlem için bir T-SQL script i oluşturmakta. Bu oluşan script i daha sonra management studio dan uygulayabiliriz.
Run immediately : Sıkıştırma işlemini hemen gerçekleştirmekte.
Schedule : Bu sıkıştırma işlemi için bir görev oluşturulabilir ve örneğin her hafta aynı gün ve saatte bu sıkıştırma işlemini tekrarlatabiliriz.
Biz bu örneğimiz için Run immediately i seçiyoruz ve next e basıyoruz. Gelen ekranda yapılacak olan sıkıştırma işlemi için bir summary bulunmakta. Bu ekranda finish e basıyoruz ve işlemi bitiriyoruz.
Table Compression işlemi management studio ile yapılabildiği gibi sql script ile de yapılabilmekte.
İlk olarak sıkıştırma yapacağımız table da ne kadar yer kazanabileceğimize bakalım.
EXEC sp_estimate_data_compression_savings
@schema_name = 'Sales'
,@object_name = 'SalesOrderDetail'
,@index_id = null
,@partition_number = null
,@data_compression = 'ROW';
Bu script vasıtasıyla Sales.SalesOrderDetail table ında ROW table compression yapılırsa kazanılacak yerleri görebilmekteyiz.
Gelen sonuç ekranında index_id 1 olan satır clustered index i göstermekte ve her bir index için kazanılacak yerleri görebilmekteyiz.
Aynı işlemi PAGE compression type kullanarakta yapabiliriz.
Şimdi ise sıkıştırma işlemini script ile gerçekleştirelim. Bunun için aşağıdaki kod bloğunu kullanabiliriz.
ALTER TABLE [Sales].[SalesOrderDetail] REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE);
Bu arada table ları create ederken compression özelliğini verebilmekteyiz. Bu sayede her defasında table ı compress yapmamıza gerek kalmamakta. Bunun içinde table create scriptinde WITH (DATA_COMPRESSION = PAGE) komutunu kullanabiliriz.
Table compression işlemlerimiz bu kadar. Şimdi BackUp Compression işlemlerine geçelim.
BackUp Compression
Dataların yedeği alınırken sıkıştırma işlemi yapılabilir. Bu şekilde sıkıştırılmış datalar herhangi bir SQL Server 2008 Edition unda restore edilebilir.
SQL Server ın BackUp alınırken sıkıştırma yapılıp yapılmayacağını belirleyen default bir özelliği bulunmaktadır. Bu özelliğin şu andaki değerinin ne olduğunu görmek için aşağıdaki script i uyguluyalım.
EXEC sp_configure 'backup compression default'
Gelen sonuç ekranında config_value kısmında 0 var ise backup işlemlerinde sıkıştırma yapılmamakta,1 var ise sıkıştırma yapılmaktadır.
Bu default değeri değiştirmek için ise aşağıdaki script i uygulayabilirsiniz.
EXEC sp_configure 'backup compression default', 1
RECONFIGURE WITH OVERRIDE;
Yukarıdaki script i uyguladıktan sonra tekrar bir önceki script i uygularsak config_value nun 1 olarak değiştiğini dolayısıyla bundan sonra yapacağımız backup işlemlerinin compress edilip backup lanacağını bilebiliriz.
Şimdi 3 değişik şekilde backup alalım ve aralarındaki farkları görelim.
İlk backup ı with clause kullanarak compressed halde alacağız.
İkinci backup ta ise server default u kullanacağız. Şu an server default umuz compress seçili.
Üçüncü back upda ise with clause kullanarak uncompressed yani sıkıştırılmamış backup alacağız.
Bu işlemler için aşağıdaki script bloklarını sırasıyla uygulayınız.
--With clause ile compress edilmiş backup
BACKUP DATABASE AdventureWorks2008
TO DISK = 'D:\temp\Compressed.bak'
WITH COMPRESSION
--default compression type ile back up
BACKUP DATABASE AdventureWorks2008
TO DISK = 'D:\temp\Default.bak'
--With clause ile compress edilmemiş backup
BACKUP DATABASE AdventureWorks2008
TO DISK = 'D:\temp\No_Compressed.bak'
WITH NO_COMPRESSION
Şimdi aldığımız backup ların boyutlarına bakalım.

Gördüğünüz gibi Default backup compress edilmiş halde çünkü server default unu buna göre ayarlamıştık.
Bu arada aklınızda bulunmasında fayda var. BackUp compression özelliği sadece SQL Server 2008 Enterprise ve Developer edition da bulunmakta. Fakat sıkıştırılmış bir backup bütün SQL Server editionlarında restore edilebilmektedir.
SQL Server 2008 de Table ve BackUp Compression işlemleri bu şekilde. Aklınıza takılan bir şey olursa yorum kısmından sorabilirsiniz.
Kolay gelsin
Turgay Sahtiyan
405fd097-e435-4f4e-b964-d8f84f7cd9fd|0|.0