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

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 metotu 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 metotunun kullanılacağı ve hangi tabloların sıkıştırılması gerektiği uygun bir strateji ile belirlenmelidir.

Bu yazıda SQL Server 2012 ile birlikte sunulan iki farklı veri sıkıştırma metotu 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.

aaacd

aaa

aaaba

aaaef

aaadc

abcd

aafe

cccab

ccca

ccc

bbca

bbed

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.

aaa(0)

ccc(1)

bb(2)

0cd

0

0ba

0ef

0dc

abcd

aafe

1ab

1a

1

2ca

2ed

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 sutun üzerinde uygulandığında aşağıdakine benzer bir sonuç elde edilecektir.

aaa(0)

ccc(1)

bb(2)

cd(4)

 

 

04

0

0ba

0ef

0dc

ab4

aafe

1ab

1a

1

2ca

2ed

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.

SQL Server 2012 AlwaysOn–System Center 2012 SP1

SQL Server 2012 ile birlikte sunulan en önemli yeniliklerden birisi AlwaysOn teknolojisi. Bu yazımız daha çok System Center ağırlıklı olsa da öncelikle AlwaysOn ile birlikte veritabanı seviyesinde ne gibi avantajlarımız var inceleyelim.

2012 versiyonu öncesi SQL Sunucularda yüksek erişebilirlik sağlamak için sıklıkla Database Mirroring ve Log Shipping yöntemleri kullanılıyordu. Ancak bu yöntemlerin bağımlı olduğu bazı bileşenler vardı. Daha da büyük sıkıntı son dönemlerin popüler konusu olan Cloud yapısına geçilmek istenirse mevcut HA yöntemleri farklı sitelar arasındaki erişilebilirliği istenildiği kadar yeterli şekilde sağlayamıyordu.

Önceki versiyonların sunduğu HA çözümlerindeki sıkıntıları hızlıca inceleyelim.

Database Mirroring çok sık kullanılan bir yöntem. Bir instance içerisinde bulunan SQL veritabanlarını farklı bir instance’a senkronize işlemini database mirroring ile gerçekleştirebiliyorduk. Ancak yaşanan en büyük sıkıntı aynı instance içerisinde bulunan ve birbirine bağımlı olarak çalışan farklı veritabanlarının bir failover durumunda grup halinde taşınamamasıydı. Aynı zamanda mirror edilen veritabanına da erişim mümkün değildi.

Database Mirroring ile her bir veritabanının ancak bir mirror kopyası oluşturulabiliyordu.

Log Shipping yöntemi ise konfigure edilmesi oldukça kompleks olmakla birlikte receiving veritabanının recovery state durumda olduğu için kullanılamamasıydı.

SQL Server 2012 AlwaysOn teknolojisi ile bu noktalarda önemli gelişmeler var.

Bana göre sunulan en önemli yenilik artık sahip olunan AlwaysOn Availability Group mimarisi sayesinde shared storage ihtiyacının ortadan kalkması. Özellikle bulut mimarisinde, private ve public cloud yapılarında SQL cluster mimarisi için costu arttıran en önemli bileşenlerden birisi shared storage ihtiyacı idi. AlwaysOn ile birlikte nodelar üzerindeki DAS ları storage olarak kullanmak mümkün kılındı.

AlwaysOn ile birlikte artık Primary olarak set edilen veritabanının secondary kopyalarını oluşturabiliyoruz. Bu noktada mimari Exchange 2010 ile birlikte sunulan DAG yapısına benzer. Tek bir primary kopyasının 4 farklı secondary kopyası farklı instanceler üzerinde oluşturulabilir.

Primary replica okuma ve yazma için uygun durumdayken aynı zamanda secondary kopyalar da read-only mode için konfigure edilebilir. Bu şu demek, secondary kopyalar üzerinde Database Backup, reporting ve snapshot işlemlerinin gerçekleştirilmesi mümkün.

Güvenlik anlamında da SQL Server 2008 ile birlikte sunulan Transparent Database Encryption (TDE) Enterprise sürüm ile birlikte sunuluyor. TDE’den kısaca bahsetmek gerekirse:

Oracle ve Microsoft tarafından sunulan veritabanı Encrypt yöntemi. Microsoft SQL 2008 ve 2012 sürümü ile TDE desteğini açıkladı. SQL tarafında sağladığı fayda ise bağımlı aplikasyonları etkilemeden var olan herşeyi encrypt etmesi.

Aktif etmek için bir master key oluşturulması, gerekli sertifikanın oluşturulması ve yedeklenmesi yeterli olacaktır. TDE için en kritik nokta master ley için oluşturulan sertifikanın asla ve asla kaybedilmemesi.

AlwaysOn arka tarafta Windows Cluster servisine bağımlı çalışıyor. Aktif etmek için yapılması gereken iki farklı standalone SQL kurulumunun yapılması ve ardından AlwaysOn enable edilerek Availability grupların oluşturulması.

Bu yazının asıl amacına gelirsek:

Bildiğimiz gibi System Center 2012 ile birlikte cloud mimarinizi uçtan uca yönetmeniz mümkün. AlwaysOn ile birlikte veritabanı bazında da datacenterlar arasındaki HA konfigurasyonu artık oldukça kolay ve başarılı.

En önemli nokta ise System Center 2012 SP1 ile birlikte SQL Server 2012 AlwaysOn’un desteklenmesi.

Özellikle Cloud Management için kullanılan System Center ürünleri olan:

  • System Center 2012 SP1 Operations Manager
  • System Center 2012 SP1 Orchestrator
  • System Center 2012 SP1 Virtual Machine Manager
  • System Center 2012 SP1 Data Protection Manager
  • System Center 2012 SP1 Service Manager
  • System Center 2012 SP1 App Controller

Tek eksik Configuration Manager 2012. Bunun sebebi olarak kişisel görüşüm ise ConfigMgr’nin Cloud Management vizyonu içerisinde kendisine çok fazla yer bulamaması.

Yukarıdaki ürünler için ise veritabanlarını SQL Server 2012 içerisinde barındırmak istersek AlwaysOn özelliğinden yararlanabilmeniz mümkündür.

CM12 – SQL 2008 R2 SP2 – Reporting Services Issues

If you are using SQL 2008 R2 SP2 as a database instance for ConfigMgr12, you may face some weird issues regarding SQL Reporting Services.

Very first thing you may face after you update current SQL Server 2008 R2 to Service Pack 2 is timeout problem.

By default SQL will try to start reporting services within 30 seconds which is default timeout value. Therefore if you restart your SQL Server you may see that service did not start with following error:

A timeout was reached (30000 milliseconds) while waiting for the SQL Server Reporting Services (MSSQLSERVER) service to connect

To overcome above timeout problem you can create following Regedit key to increase timeout value:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl

DWORD

ServicesPipeTimeout

Decimal : 120000

That will increase default timeout value to 120 seconds. After you restart service, it will start automatically.

But this regedit hack does not solve CM12 Reporting Services Role Installation problem.

If you start Reporting Services point role installation on SQL Server within ConfigMgr12 console, it will create a root reporting folder, create CM12 related reports and then restart Reporting Services.

That’s where problem starts. CM12 will not use configured timeout value and will try to restart service within 1 min. And if your SQL Server starts SRS service in more than 1 min, Reporting Services Role installation will fail. Here is the log file from srsp.log file.

Starting service 'ReportServer'
Time out has expired and the operation has not been completed

To solve this problem easily, you need to install Cumulative Update 1 for Configuration Manager 2012.

http://support.microsoft.com/kb/2717295

Site Systems
  • A Reporting Services Point may not be installed or start if the SQL Reporting Service does not start within one minute. The srssp.log file may contain entries that resemble the following entry:Starting service 'ReportServer'
    Time out has expired and the operation has not been completed.

Configuration Manager 2012 – Editing built-in reports using Report Builder

Configuration Manager 2012 provides bunch of built-in reports using SQL Reporting Services. In order to have these reports within ConfigMgr console you need a configured SQL Reporting Service. Then you need to install Reporting Services Point role for Configuration Manager 2012.

As I said, these reports are built-in reports. SQL queries, parameters and custom expressions are pre defined. You can get these information and edit or create your own reports easily. In this post I want to share one of my experience regarding a built-in report that did not meet with my requirement. I will try to show how I edited this report using Report Builder.

If you want to play with ConfigMgr reports, very first thing you need is Report Builder. To edit a built-in report, just navigate to reports folder, right click a report and choose edit.

image

But for the first time you may get following error message that indicates Report Builder is not installed:

image

With SQL Server 2008, Report Builder 2 is shipped. But if you are using SQL Server 2008 R2 as database server for ConfigMgr12 then you need to change following regedit key to point Report Builder 3 version which is default builder version for SQL Server 2008 R2.

  • Navigate to HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftConfigMgr10AdminUIReportingReportBuilderApplicationManifestName
  • Change value to ReportBuilder_3_0_0_0.application

After you successfully edit, navigate to reports node and click edit again.

I had a problem with the report “Hardware 10A-Computers in a specified collection that have changed during a specified timeframe” . I wanted to create an email subscription for the hardware changes. But this subscription must be daily and only must show data for yesterday. Thereby sccm admin will get report mail for hardware changes for only one day before.

But if you create a subscription using ConfigMgr console or Reporting Services Web site, SRS asks you for specific start and end dates. But I need to put a dynamic range which only includes previous day.

image

So I decided to use SRS web site to create a subscription as I can leave default for the start and end dates.

image

It worked great. There was no need to specify dates. But second problem was default values. As you see in above capture, by default report will be generated for whole month. Therefore I need to modify default range for this report.

I started Report Builder and checked for the parameters.

image

And find out that these reports have GlobalStartDate and GlobalEndDate parameters. Opened GlobalStartDate properties and checked for the default formula.

image

image

Here it is! This is why this report brings hardware change information for whole month. I just changed –30 to –1 and saved the report.

image

clip_image002

Now check default values again.

clip_image001

As you see range is only for one single day.

This is a simple modification. Using report builder you can create custom reports using custom expressions, parameters and Datasets. All you need to know is where your ConfigMgr asset data is stored.

SQL SERVER 2005 KURULUM

Günümüzde önüzme çıkan şirketlerin büyük çoğunluğunda küçüklü büyüklü veritablarına rastlarız.Bir sistemci olarak aslında yazılım alanının bir parçası olan SQL SERVER konusundada en azından yönetim bölümü hakkında bilgi sahibi olmalıyız.Bu ileride bize ek avantaj sağlar.

 

Aşağıda SQL server 2005 kurulumunu kısaca anlatıyorum.Ardından diğer yazılarda konfigurasyon ve yeniliklerden bahsedeceğim. (more…)