Sql Server Maximum Degree of Parallelism ve Cost Threshold for Parallelism
 
Sql Server, Senior Information basligi altinda ileri düzey sql bilgilerini paylasmaya devam ediyorum. Bu kategori sql server seniorluk bilgieri kategorisidir. Zira burada anlatilanlar ileri sql bilgisi olarak görmekteyim.

Sql Server performans çalismalari kapsaminda Maximum Degree of Parallelism (MAXDOP) ve Cost Threshold for Parallelism kavramlari büyük önem teskil etmektedir. Ilk olarak bu kavramlarin tanimlari ile baslayacagim.


Maximum Degree of Parallelism(MAXDOP)

Tam sayi degeri almaktadir. Verilen tamsayi degerini CPU sayisini göstermektedir.
 


Cost Threshold for Parallelism(CTFP):

Tam sayi degeri almaktadir. Buraya verilen tamsayi degeri ile bu tamsayi degerini asan sorgularda paralellestirme yaparak Max. Degree of Parallelism de verilen tamsayidaki CPU lara sorgu bölüstürülerek parallestirme yapilir. CTFP'ye verilen tamsayi degerinin birimsel olarak herhangi bir karsiligi yoktur. Bir takim algoritmalar sonucu hesaplanmaktadir.

Simdi Sql Server da bu ayarlarin nerede yapildigi göstereyim. Sql Server'i açtigimizda;


Server'a sag tiklayip Properties menüsü açalim. Buradan Advanced menüsüne tikladigimizda asagidaki gibi bir ekran gelmektedir.


Bu ekranda MAXDOP ve CTFP ayarlari için ilgilenecegimiz kisim Parallelism basligi altindaki kisimdir. Burada Max Degree of Parallelism ve Cost Threshold for Parallesim degerleri verilmektedir.

MS Sql Server ilk kuruldugunda MAXDOP degeri varsayilan olarak 0 ve CTFP degeri ise 5 olarak set edilmektedir.

Buradaki önemli nokta: MAXDOP 0 olmasi, hiç bir CPU ya sorguyu paralellestirme demek degildir.  MAXDOP 0 ise sorgunun CTFP degeri 5'i geçtiginde bilgisayardaki toplam kaç CPU var ise paralellestir demektir.

MAXDOP ve CTFP paralellestirme ile ilgili islemlerde kullanilmaktadir.

Parallestirme: Belli bir süreden fazla süren sorgulari CPU lara bölerek birden fazla CPU da çalistirilmasini ve performans açisindan tek CPU'ya göre daha hizli sonuç vermesini saglamaktadir.

Sql Server da bir sorgunun çalismasi uzun sürüyorsa basta indexleme ve sorguda düzenleme olmak üzere bir takim islemler yapmaniza ragmen yavaslik giderilmediyse ve sorgu birden fazla tablodan join yapilan bir sorgu ise paralellestirme yaparak sorgunun hizli çalismasini saglayabilirsiniz.

Bir örnek ile pekistirelim;
 

SELECT * FROM Makale m INNER JOIN Kategori k
ON M.KategoriID=K.KategoriId
WHERE m.Icerik like '%merhaba%'

sorgusu çalistirdim. Sorgunun Execution Plan'ina baktigimda asagidaki gibi;


En bastaki SELECT üzerine geldigimde bana sorgu ile ilgili genel bilgileri göstermektedir. Burada parallestirme için dikkat etmemiz gerek yer Estimated Subtree Cost degeridir. Bu sorgu için deger 0,106972 olarak hesaplanmistir. Basta dedigimiz gibi bu deger saniyeyi göstermemekte,  birimsel olarak herhangi bir karsiligi yoktur. Bir takim algoritmalar sonucu hesaplanmaktadir.

Bu deger 5'ten küçük oldugu için herhangi bir parallestirme yapilmamistir. Eger tablo fazla veri içerseydi ve sorgumuzun  Estimated Subtree Cost  degeri 5'in üstünde olsaydi Sql Server parallestirme yaparak sorguyu bilgisayarimda CPU sayilarina bölüstürecekti.

Genellikle büyük data ile islem yapilan veritabanlarindan MAXDOP ve CTFP degerlerinin dogru yapilandirmasi oldukça önemlidir. Sizde büyük veri içeren veritabaninda islem yapiyorsaniz ve sik sik oldukça uzun çalisma süreli sorgular çekiliyorsa MAXDOP ve CTFP degerlerini konfigüre etmeyi deneyerek hiz kazandirabilirsiniz. Bu gibi bir veritabaninda MAXDOP: 2 ve CTFP:5 yapmanizi tavsiye ederim. Çalismasi süresi kisa süren sorgularda parallestirme yapmak önerilmez. Bu nedenle CTFP degerini minimum 5 verilmesini tavsiye ederim. Aksi halde 5'den az olan sorgularda parallellestirme yapmak sorgu süresini daha fazla uzatabilir.

Bir baska makalede görüsmek üzere.

 

Author: Engin ATALAY
Date: 30.06.2015 00:06:29
View Count: 5513
 
 

COMMENTS
 
No comments yet. Be the first to comment who you are.
 
 
 
 
 
 
 
WRITE COMMENT
 
 
Your Name :
 
 
 
E-mail :
 
 
 
Your Message :
 
 
 
 
 
 
 
This project : ASP.NET MVC , RAZOR, Entity Framework , CSS , HTML , JQUERY(2.0.2) , AJAX the C# side-tier architecture was developed with logic.
 
Yukarı Çık