16 Haziran 2015 Salı

Sql Server 2014 performans problemi ve çözümleri

   Bir heyecanla taşındığımız 2014 ortamından çok şey bekleyorken hevesinizi kursağınızda bırakacak bir takım performans problemleri karşımıza çıktı.

Sql Server 2014 ile  birlikte  cardinality estimation yapısı yeniden yazıldı. Bu sebeple bazı sorgularda execution planlar çok farklı oluşup sürpriz performans kayıplarına neden olmaktadır.
Özellikle inner query, temp tablo içeren bazı sorgular ve case when içeren sorgular da daha çok rastladığım bir durum dur. 

Bi sürpriz yaşamamak için;
Öncelikle migration planınıza kritik sorgularınızın 2014 versiyonun da test edilip execution planının incelenmesini mutlaka ekleyin.

Bu gibi bir problem ile karşılaştığınız da öncelikle sp1 yüklümü kontrol etmek gerekiyor . Sp1 ile bu sorunların bazıları giderilmiş .
Bir de trace flag eklemek gerekiyor 1118 ve 1117 yi eklemek sorunlarınıza çözüm olacaktır.

Peki sp1 ve T-1118 T-1117 eklemek çözüm olmadı mı ?
Ozaman sorgu seviyesine inip  sorgunun hem eski cardinality de Hemde yeni cardinality de oluşan planını karşılaştırıp gerekli index force işlemi varsa yapabilirsiniz.
 Bu şekilde Manuel müdahale edilemeyen sorgular için ise  iş biraz daha karmaşıklaşıyor.
Ya database compatibility levelını eski versiyona çekerek çözüm üretilebilirsiniz, bu çözüm tercih edilmez. Bu 2014 ün nimetlerinden feragat etmişsiniz anlamına gelir, Karışık dediğim yanı bu dur.

Peki Manuel müdahale edecek çok yer var ve acil bir çözüm gerekiyor ise sadece sorgunuzu eski query planda çalıştırmak için  eski cardinality ile sorguyu derle diyebilirsiniz. Şu şekilde:
Sorgunun sonuna bir query hint tanımlayarak bu sorunu giderebiliriz.
...........
........... OPTION (QUERYTRACEON 9481);


Hiç yorum yok: