SQL Server 2022 Intelligent Query Processing-2, PSP Parameter Sensitive Plan



SQL Server ile uğraşıp parameter sniffing sorunu ile karşılaşanlar vardır. Temel mesele execution plan ın bir parametre için derlenmesi ve başka bir parametre geldiğinde olması gereken execution plan yerine cache de oluşturulan mevcut execution planın çalıştırılması işlemidir.
Daha açık bir tabir ile özellikle stored procedure gibi derlenmiş bir sql cümlesini bir parametre ile çağırdığınızda çok hızlı bir şekilde gelen sorgunun başka bir parametre ile çağırıldığında aşırı yavaş gelmesi durumudur.
Bu sorunun sebebi procedure ün ilk çağırıldığı parametre ile derlenmiş olmasıdır.
Örnek olarak bir perakende satış sistemini düşünelim. Burada elimizde büyük bir veri seti var ve biz bu verisetini kullanarak bir dashboard oluşturduk. Bu dashboard ise spSales isimli bir stored procedure tarafından besleniyor ve bu procedure içine şehir parametresini alıyor. Burada şüphesiz İstanbul’un satışları fazla olduğu için İstanbul gönderildiğinde CITY alanına ait indexi kullanmak yerine table scan yapması daha mantıklıdır.
Oysa Iğdır gibi az satış yapan bir şehir parametresi gönderdiğimizde burada ise satır sayısı az olduğu için index üzerinden arama yapması yani index seek yapması mantıklıdır.
İşte biz bu stored procedure ü ilk olarak Iğdır ile çağırırsak oluşan execution plan index seek olarak saklanacaktır ve ikinci kerede İstanbul ile çağırdığımda yine index seek işlemi yapacaktır. Bu da sorgunun aşırı yavaş gelmesine sebep olacaktır.

Yukarıda bir örnek ile bir sorun tanımladım. İşte SQL Server 2022 bir procedure için birden fazla plan saklama özelliği ile geliyor. Böylece gelen parametrenin türüne göre doğru indexi ve doğru execution planı oluşturuyor.
Bu videoda uygulamalı şekilde anlattım.

Comments are closed.