Etiketler

,


SP’ler Üzerinde OPTION RECOMPILE Etkisi | Execution Plan Ne Kadar Güncel?

Option Recompile teriminin özellikle lokal değişkenlerinin kullanıldığı sorgulardaki hayati etkisininden SQL – LOKAL DEĞIŞKENLER VE SORGU PERFORMANSI / OPTION ( RECOMPILE)  isimli yazımda bahsetmiştim.  Bu yazı üzerine düşünülmesi gereken çok hassas konular olduğu kanaatindeyim.

SP’lerin bilinen en büyük avantajı Execution Planları ilk çağrılış (oluşturuluş değil) zamanında bir kere oluşturulup, daha sonra bu planların diğer çağrımlarında da kullanılıyor olmasıdır. Bu sayede her çağrıldıklarında tekrar tekrar Execution Plan’lar oluşturulmayacağı için, zamanında oluşturulmuş ve optimize edilmiş planlar üzerinden çalışırlar.

Fakat ya ilk çağrıldıklarında oluşturulan Execution Plan, şuan için efektif değil ise? Yani ilgili SP ilk çağrıldığında, hangi parametrelerle çağrıldıysa, o parametreler baz alınarak bir yol haritası çıkartılmıştı. Ya verinin şuan ki hali ile o ilk planın çıkartıldığı hali arasında çok büyük farklılıklar var ise? Bu durumda, bu zamana kadar avantaj olarak bildiğimiz, Execution Plan‘larının hali hazırda hazır olması bizim için avantajtan ziyade bir dezavantaj oldu.

Eğer sıkça değişen ve sürekli yeni (farklı) değerler eklenen bir alan üzerinden sorgu yapıyorsanız, SP’lerinizin Execution Plan’larının güncellenmesine, tekrar compile ve optimize edilip, yeniden oluşturulmasında yarar var. Bu size ciddi ölçüde performans kazandıracaktır. Fakat içeri sıkça değişmeyen ve aralık olarak sınırlı sayıda bir kümeye sahip bir alan üzerinden filitreleme yapıyorsanız, SP’yi her seferinde tekrar compile etmeniz size performans kaybettirecektir.

SQL Server versiyonlarına göre (2000, 2005 , 2005 SP1, … 2008 R2) çeşitli sebeplerden ötürü SP’lerini recompile etme işlemini otomatik olarak gerçekleştirir. Örneğin tüm versiyonlarda şemanın ya da istatistiklerin değişmiş olması, recompile işleminin gerçekleşmesi için yeterli bir sebeptir.  2000 SP2,2005 ve 2008 için Microsoft tarafından hazırlanmış listeyi aşağıda inceleyebilirsiniz.

ve 2008 için

Teknik olarak birkaç ufak not belirtmek gerekirse,

SP’leri

  • CREATE PROCEDURE …. WITH RECOMPILE
  • EXEC sp_recompile …
  • EXEC … WITH RECOMPILE

yukarıdaki komutlarla yeniden derlenmesini sağlayabilirsiniz.

Özetle, nerede OPTION RECOMPILE kullanıp kullanmamanız gerektiğini, hazırladığınız SP’nin yapısına göre karar vermeniz gerekmektedir. Ezbere kullanmak (ya da kullanmamak) ciddi performans kayıplarına yol açabilir.

Bu konu ile ilgili olarak aşağıdaki yazıları okumanızı öneririm.

Reklamlar