Sorguma ekleme OPTION (RECOMPILE)
, sorgunun beş dakikadan fazla sürmesine neden olurken, sorguma ekleme yarım saniye içinde çalışmasına neden olduğu garip bir durumla karşılaştım .
Sorgu Query Analyzer'dan veya C # programım üzerinden yürütüldüğünde durum budur SqlCommand.ExecuteReader()
. Aramak (veya aramamak) DBCC FREEPROCCACHE
veya DBCC dropcleanbuffers
fark etmez; Sorgu sonuçları her zaman anında OPTION (RECOMPILE)
ve olmadan beş dakikadan daha uzun süre döndürülür . Sorgu her zaman aynı parametrelerle [bu test uğruna] çağrılır.
SQL Server 2008 kullanıyorum.
SQL yazma konusunda oldukça rahatım, ancak daha OPTION
önce bir sorguda bir komut kullanmadım ve bu forumdaki mesajları tarayana kadar plan önbelleklerinin tüm konseptine aşina değildim . Görevlerden aldığım anlayış OPTION (RECOMPILE)
pahalı bir operasyon. Görünüşe göre sorgu için yeni bir arama stratejisi oluşturuyor. Öyleyse neden, atlayan sonraki sorgular bu OPTION (RECOMPILE)
kadar yavaş? Sonraki sorgular, yeniden derleme ipucunu içeren önceki çağrıda hesaplanan arama stratejisini kullanmıyor mu?
Her aramada yeniden derleme ipucu gerektiren bir sorguya sahip olmak son derece sıra dışı mı?
Giriş seviyesi soru için özür dilerim ama bununla ilgili kafa ya da kuyruk yapamıyorum
GÜNCELLEME: Sorguyu göndermem istendi ...
select acctNo,min(date) earliestDate
from(
select acctNo,tradeDate as date
from datafeed_trans
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_money
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_jnl
where feedid=@feedID and feedDate=@feedDate
)t1
group by t1.acctNo
OPTION(RECOMPILE)
Testi Query Analyzer'dan çalıştırırken aşağıdaki satırların başına ekliyorum:
declare @feedID int
select @feedID=20
declare @feedDate datetime
select @feedDate='1/2/2009'
Benim C # programından çağırırken, parametreleri SqlCommand.Parameters
özellik üzerinden geçirilir .
Bu tartışmanın amaçları doğrultusunda, parametrelerin asla değişmediğini varsayabiliriz, bu nedenle neden olarak optimal olmayan parametre kokusunu ekarte edebiliriz.
X = @X OR @X IS NULL
etmek X=@X
ve bir aramaya performans Burada See veya pencere fonksiyonları ile bir görünümde karşı daha aşağı yüklemler iterek
RECOMPILE
. Her durumda yürütme planlarını yakalayın ve farklılıklara bakın.