MSSQL Server Compatibility Level Upgrade

Bu makalede Sql Server Compatibility Level Upgrade kavramını ele almış olacağız. Bir önceki makalemizde internetten bulmuş olduğum SQL Server 2008 R2  sql server sürümündeki bir bak uzantısını sql server 2022’ye restore ettiğimizde herhangi bir sorunla karşılaşmamıştık.

Restore ettiğimiz sql server’ın desteklenen uyumluluk seviyesi restore ettiğimiz database’de mevcutsa restore edilen database yeni sql serverda desteklenen compatibility seviyesinde kalır. Eğer restore edeceğimiz database mevcut sql server sürümünde compatibility level seviyesi desteklenmiyorsa restore edilen bu database’in compatibility level seviyesi restore edilen sql server sürümündeki en düşük compatibility level seviyesi olmaktadır. Aşağıdaki tabloda Microsoft’un sayfasında almış olduğum uyumluluk seviyelerini görebiliriz.

Hangi sql server sürümünün hangi Compatibility değerini desteklediğini aşağıdaki tablodan görebiliriz.

Sql Server SürümüVeritabanı SürümüVarsayılan Uyumluluk SeviyesiDesteklenen Uyumluluk Seviyesi
SQL Server 2022 (16.x)16160160, 150, 140, 130, 120, 110, 100
SQL Server 2019 (15.x)15150150, 140, 130, 120, 110, 100
SQL Server 2017 (14.x)14140140, 130, 120, 110, 100
SQL Server 2016 (13.x)13130130, 120, 110, 100
SQL Server 2014 (12.x)12120120, 110, 100
SQL Server 2012 (11.x)11110110, 100, 90
SQL Server 2008 R2 (10.50.x)10.5100100, 90, 80
SQL Server 2008 (10.0.x)10100100, 90, 80
SQL Server 2005 (9.x)99090, 80
SQL Server 2000 (8.x)88080

Şimdi yukarıdaki bilgilerden sonra veritabanımızın compatibility değerini yükseltmek istediğimizde ne gibi işlemler yaparız.

Compatibility level değişikliğinden sonra mevcut olan database üzerinde bazı sorunlar oluşabilir. Çünkü database üzerinde uyumluk seviyesinde değişiklikler mevcut olan stored procedure, sorgularımızın yapısı, kullanılmayan fonksiyonlar gibi. Birden fazla sebep database üzerindeki execution planın değişmesine sebebiyet verebilir. Compatibility level değişikliğinden sonra veritabanı üzerinde Ouery Store özelliğini açarak veritabanımızın stabil çalışıp çalışmamasını veya execution planlarında bir değişikliğe sebebiyet verip vermediğini gözlemleyebiliriz. Sayfanın  arama kısmından Ouery Store ilgili detaylı bir makaleye ulaşabilirsiniz.

Sql Server’ın bize sunmuş olduğu güzel bir özellikten  daha bahsetmek isterim  birincisi yukarıdaki belirttiğim Query Store özelliğiydi ikinci özellik ise database’in level değişikliğinden önce belirli bir süre database üzerine gelen sorguların  Compatibility değerden önceki ve sonraki değerlerini karşılaştırarak bize çok güzel bir dönüş yapmaktadır. Bu yapıda database kendi içerisinde dosyaları tutmaktadır.

Bir örnek üzerinden konuyu daha net anlaşılacağı kanaatindeyim.

Birinci adımda ilgili Database üzerine sağ tıklanır Task>Database Upgrade>New Database Upgrade Session bölümüne tıklanır. Bu yapılan işlem sadece compatibility upgrade işlemidir.

Gelen ekranda  Worload duration to capture bölümünde kaç gün boyunca verilerin toplanmasını istiyorsak onu seçiyoruz. 5 dersek 5 gün boyunca canlı gözlem yapabiliriz. Target database Compatibility level kısmında ise database’in geçmesini istediğimiz uyumluluk seviyesini belirtiyoruz. Bu işlemlerden sonra Next deyip bir sonraki aşamaya geçiyoruz.

Gelen ekrandaki değerler query store’daki özelliklerin aynısı default değerlerle bırakıp Next deyip bir sonraki aşamaya geçiyorum. Bu bölümlerin ne işe yaradığını Query Store makalesinden bulabilirsiniz.

Gelen ekranda Finish deyip işlemlerimi sonlandırıyorum. Tekrar database’in üzerine gelip bu sefer sağ tıklayıp Task>Database Upgrade>Monitor Sessions  kısmına tıklanır.

Gelen Setup bölümünde Details sekmesine tıkladıktan sonra 2. Kısım olan  Data Collection kısmına gelinir.

Gelen ekranda Data Collection kısmında aşağıda bulunan tik’i seçtikten sonra Next deyip yükseltme işlemini yapıyorum.

Done with workload run seçeneğini aktif ettikten sonra Next diyiyorum.

Next dedikten sonra gelen ekranda yükseltme işlemi gerçekleştirmek istiyor musunuz diye bir seçenek karşımıza geliyor. Yes dedikten sonra bir sonraki ekrana geçiyoruz.

Gelen ekranda  tekrar Next deyip sorgularımızın düştüğü ekrana gelinir.

Evet artık veritabanımız yeni compatibility seviyesine geçmiş oldu. Artık aşağıdaki ekranda veritabanının level değişikliğiyle sorgularda veya insertlerde değişimini % Change kısmından görebiliriz. Eksi ifadesi kazançlı olduğumuzu yani maliyetinin yeni level’de daha da düştüğünü göstermektedir. Artı olması level değişikliğinin sorgu için faydasının olmadığını ve maliyetli olduğunu anlamalıyız. Ben canlı sistemde level değişikliğini bu yöntemle yapmış oldum. Bu şekilde level değişikliğini faydalı olup olmadığını gözlemleyebiliriz. Runs kısmında ise sorgunun kaç defa çalıştığını gösterir. Belirli aralıklarla veriler güncellenmektedir. Tunable değerinin true olması ayarlanabilir olduğunu göstermektedir.

Geçiş yaptıktan sonra izliyoruz. İnstance üzerine sağ tıklayıp active monitör ekranında geçiş yapmadan önceki Batch Requests/sec değerini  geçiş yaptıktan sonraki Batch Requests  değeriyle karşılaştırıyorum. Eğer arka planda gelen sorgularda ciddi anlamda artış varsa compatibility level seviyesini eski haline getirmeliyiz. 10-15 dakika bir izlenmesi gerekmektedir.

Dikkat ederseniz belirli aralıklarla monitör ekranı izlendiğinde %Change değerlerinin değişim için de olduğunu görmekteyiz.

Gözlemlerimizi günlerce veya aynı gün içerisinde de yapabiliriz. Daha sonra bu yapının silinmesini istersek yukarıdaki resimde de görülen Sessions kısmına tıklanır gelen ekranda Delete Sessions denilip silinir.

Not: Upgrade işlemi bölümünde herhangi bir sıkıntı ile karşılaşılırsa compatibility level sadece mevcut levelin bir üst seviyesine çıkartılır. Daha sonra diğer levellere upgrade işlemi yapılmaktadır. Parça parça değilde tek seferde bu işlem yapılır.

İlgili upgrade işlemi yapıldıktan sonra veritabanı altında bulunan tablolarda aşağıdaki tablolar oluşmaktadır. Upgrade işlemi yapıldıktan sonra silinmesi gerekmektedir. Kullanıcı monitor ettiği ekrandaki istatistikler aşağıdaki tablolar üzerinden gelmektedir. Upgrade işleminden sonra silinmesi gerekmektedir.

İnplace upgrade veya compatibility level upgrade işlemlerinden Data Migration Assistant kullanılmaktadır. Çünkü SSMS arayüzünde upgrade işlemlerinde veritabanı üzerinde assembly programlama yapısının olması bizlere sıkıntılara sebebiyet verecektir.

Bu makalede Sql Server Compatibility  Level Upgrade işlemini ele almış olduk. Başka bir makalede görüşmek dileğiyle.

Şüphesiz güçlükle beraber bir kolaylık vardır.Gerçekten, güçlükle beraber bir kolaylık vardır.Öyleyse, bir işi bitirince diğerine koyul. Ancak Rabbine yönel ve yalvar. İnşirah 5-8

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir