Långsam procedur

Oopps! Upgrade your browser pretty please. Oopps! Upgrade your browser pretty please.

Ibland kan man uppleva att en stored procedure går långsamt jämfört med om man kör samma fråga i SSMS Query Analyzer. En trolig orsak till detta är då att olika exekveringsplaner används. Dessutom kan man ibland upptäcka att samma procedur börjar gå långsamt efter ett tag att så stora skillnader som minuter mot sekunder uppstår.

Detta fenomen kan bero på sk ”Parameter Sniffing” som i korthet beror på att de parametrar som används första gången när sp’n körs  och skapar exekveringsplanen inte är så bra representanter för datat.

Det kan man lösa på det några olika sätt:  
– Ett enkelt sätt är skapa om proceduren, dock kommer man troligen få göra det ganska regelbundet.
– Ytterligare ett sätt är att lägga till ”WITH RECOMPILE” i början av sp’n för att på sätt tvinga fram en omkompilering varje gång sp’n     används.
– Ett mera jobbigt sätt är att jobba med sk Query Hints för att på så sätt tvinga fram en viss exekveringsplan. Detta sätt rekommenderar vi inte utan i undantagsfall eftersom det kräver en stadig bevakning allteftersom datat i tabellerna ändras.  
– Det bästa sättet till slut är att använda sk lokala variabler och helt enkelt tilldela inparametrarnas värde till dem istället och sedan använda dessa i frågan.

Det är relativt ovanligt att man behöver göra på något av dessa sätt, men ibland är det nödvändigt. Hör av er till någon av oss om ni har ytterligar frågor eller funderaringar runt detta område att optimera prestandan på databaser i SQL Server miljöer.