Sql Server Maximum Degree of Parallelism ve Cost Threshold for Parallelism
 
Sql Server, Senior Information başlığı altında ileri düzey sql bilgilerini paylaşmaya devam ediyorum. Bu kategori sql server seniorluk bilgieri kategorisidir. Zira burada anlatılanlar ileri sql bilgisi olarak görmekteyim.

Sql Server performans çalışmaları kapsamında Maximum Degree of Parallelism (MAXDOP) ve Cost Threshold for Parallelism kavramları büyük önem teşkil etmektedir. İlk olarak bu kavramların tanımları ile başlayacağım.


Maximum Degree of Parallelism(MAXDOP)

Tam sayı değeri almaktadır. Verilen tamsayı değerini CPU sayısını göstermektedir.
 


Cost Threshold for Parallelism(CTFP):

Tam sayı değeri almaktadır. Buraya verilen tamsayı değeri ile bu tamsayı değerini aşan sorgularda paralelleştirme yaparak Max. Degree of Parallelism de verilen tamsayıdaki CPU lara sorgu bölüştürülerek paralleştirme yapılır. CTFP'ye verilen tamsayı değerinin birimsel olarak herhangi bir karşılığı yoktur. Bir takım algoritmalar sonucu hesaplanmaktadır.

Şimdi Sql Server da bu ayarların nerede yapıldığı göstereyim. Sql Server'ı açtığımızda;


Server'a sağ tıklayıp Properties menüsü açalım. Buradan Advanced menüsüne tıkladığımızda aşağıdaki gibi bir ekran gelmektedir.


Bu ekranda MAXDOP ve CTFP ayarları için ilgileneceğimiz kısım Parallelism başlığı altındaki kısımdır. Burada Max Degree of Parallelism ve Cost Threshold for Parallesim değerleri verilmektedir.

MS Sql Server ilk kurulduğunda MAXDOP değeri varsayılan olarak 0 ve CTFP değeri ise 5 olarak set edilmektedir.

Buradaki önemli nokta: MAXDOP 0 olması, hiç bir CPU ya sorguyu paralelleştirme demek değildir.  MAXDOP 0 ise sorgunun CTFP değeri 5'i geçtiğinde bilgisayardaki toplam kaç CPU var ise paralelleştir demektir.

MAXDOP ve CTFP paralelleştirme ile ilgili işlemlerde kullanılmaktadır.

Paralleştirme: Belli bir süreden fazla süren sorguları CPU lara bölerek birden fazla CPU da çalıştırılmasını ve performans açısından tek CPU'ya göre daha hızlı sonuç vermesini sağlamaktadır.

Sql Server da bir sorgunun çalışması uzun sürüyorsa başta indexleme ve sorguda düzenleme olmak üzere bir takım işlemler yapmanıza rağmen yavaşlık giderilmediyse ve sorgu birden fazla tablodan join yapılan bir sorgu ise paralelleştirme yaparak sorgunun hızlı çalışmasını sağlayabilirsiniz.

Bir örnek ile pekiştirelim;
 

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

sorgusu çalıştırdım. Sorgunun Execution Plan'ına baktığımda aşağıdaki gibi;


En baştaki SELECT üzerine geldiğimde bana sorgu ile ilgili genel bilgileri göstermektedir. Burada paralleştirme için dikkat etmemiz gerek yer Estimated Subtree Cost değeridir. Bu sorgu için değer 0,106972 olarak hesaplanmıştır. Başta dediğimiz gibi bu değer saniyeyi göstermemekte,  birimsel olarak herhangi bir karşılığı yoktur. Bir takım algoritmalar sonucu hesaplanmaktadır.

Bu değer 5'ten küçük olduğu için herhangi bir paralleştirme yapılmamıştır. Eğer tablo fazla veri içerseydi ve sorgumuzun  Estimated Subtree Cost  değeri 5'in üstünde olsaydı Sql Server paralleştirme yaparak sorguyu bilgisayarımda CPU sayılarına bölüştürecekti.

Genellikle büyük data ile işlem yapılan veritabanlarından MAXDOP ve CTFP değerlerinin doğru yapılandırması oldukça önemlidir. Sizde büyük veri içeren veritabanında işlem yapıyorsanız ve sık sık oldukça uzun çalışma süreli sorgular çekiliyorsa MAXDOP ve CTFP değerlerini konfigüre etmeyi deneyerek hız kazandırabilirsiniz. Bu gibi bir veritabanında MAXDOP: 2 ve CTFP:5 yapmanızı tavsiye ederim. Çalışması süresi kısa süren sorgularda paralleştirme yapmak önerilmez. Bu nedenle CTFP değerini minimum 5 verilmesini tavsiye ederim. Aksi halde 5'den az olan sorgularda parallelleştirme yapmak sorgu süresini daha fazla uzatabilir.

Bir başka makalede görüşmek üzere.

 

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

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