sp_executesql ve EXEC Kullanımı

Reading Time: 3 minutes

Dinamik Query lerimizi EXEC ile mi sp_executeSql ile mi Çağırmalıyız ?

Firmalarda bir çok kod incelememde karşılaştığım en önemli performans kriterlerinden ve en çok karşılaşılan türden bir performans problemidir.

Elimizde bir dinamik sorgumuz var ve bu sorgumuzu EXEC … diye mi yoksa sp_execute … diye mi çalıştırmak daha sağlıklı sorusunun cevabını aşağıda yapacağımız demo ile uygulamalı olarak sizlere anlatıyor olacağım.

Normal şartlar altında bir SQL Query mizi doğrudan çalıştırdığımızda , bellekteki en uygun query plan ı okuyarak ona göre sorguyu çalıştırır.  Dinamik Query lerimizde bu süreç bu şekilde gelişmemekte ve her çalıştırılmada tekrar tekrar Execution Plan oluşturulur her çalıştırılmada. Peki bu bize canlı sistemlerimizde nasış bir yük oluşturuyor derseniz bunu daha derin bir makale de sizlere detaya girerek aktaracağım ama Execution her oluşturulurken CPU ya yük bindirecek ve sistem Source larını yüklü miktarda kullanıma göre tüketerek canlı sistemlerinizde büyük sıkıntılara yol açabilir.

Sp_executesql parametrik olabilirken EXECUTE (EXEC) komutu parametrik değildir.  Yani hazırlanan query nin parametrik olmasından bahsediyoruz.

Performans açısından ise sp_executesql ile çalıştırılan query ler ‘in execution planı memory de tutulduğundan parametre değişse de aynı execiton planı kullanmaktadır. Diğer yöntem ile çağrılan her query her defasında yeni bir Execution plan oluşturmaktadır.

 

Şimdi sizlere bu anlatımın Demosunu gerçekleştirelim.

Yukarıda demo tablomuzu oluşturup içerisine datamızı basıyoruz. Daha sonra yapımızda ki Cache i aşağıda ki Script ile temizliyoruz.

Daha sonra ise EXEC ile sp_executesql örneğimizi hazırladığımız scriptimizi RUN ediyoruz.

Daha sonra Cache imizi aşağıda ki script ile kontrol ettiğimizde ki sonuca baktığımızda;

sp_execute sql aynı plan cache i kullanmış ve 3 kere aynı plan üzerinden çalıştırılmıştır. Diğer EXEC ifadeleri ise her çağrılışında ayrı bir Plan oluşturup oradan çalıştırılmıştır.

Performans açısından sistemlerinizde yer alan  EXEC ifadelerinizin yerine sp_executesql ifadesi kullanarak performans arttırımı sağlayabilrisiniz.

İyi Çalışmalar.

Leave a Reply

Your email address will not be published. Required fields are marked *