Nous avons un problème dans nos environnements de test et de développement avec une fonction qui s'exécute parfois très lentement lorsqu'elle est appelée depuis une application .Net. Lorsque nous appelons cette fonction directement depuis Management Studio, elle fonctionne parfaitement.
Voici les différences lorsqu'ils sont profilés : De l'application :
CPU : 906
Lire : 61853
Ecritures : 0
Durée : 926
Depuis SSMS :
CPU : 15
Lectures : 11243
Ecritures : 0
Durée : 31
Maintenant, nous avons déterminé que lorsque nous recompilons la fonction, les performances reviennent à ce que nous attendons et le profil de performance lorsqu'il est exécuté à partir de l'application correspond à celui que nous obtenons lorsque nous l'exécutons à partir de SSMS. Il commence à ralentir à nouveau à des intervalles qui semblent aléatoires.
Nous n'avons pas constaté cela dans la prod, mais c'est peut-être en partie parce que tout y est recompilé sur une base hebdomadaire.
Alors qu'est-ce qui peut causer ce genre de comportement ?
Editer -
Nous avons finalement pu nous attaquer à ce problème et la restructuration des variables pour gérer le reniflage des paramètres semble avoir fait l'affaire...un extrait de ce que nous avons fait ici : Merci pour votre aide.
-- create set of local variables for input parameters - this is to help performance - vis a vis "parameter sniffing"
declare @dtDate_Local datetime
,@vcPriceType_Local varchar(10)
,@iTradingStrategyID_Local int
,@iAccountID_Local int
,@vcSymbol_Local varchar(10)
,@vcTradeSymbol_Local varchar(10)
,@iDerivativeSymbolID_Local int
,@bExcludeZeroPriceTrades_Local bit
declare @dtMaxAggregatedDate smalldatetime
,@iSymbolID int
,@iDerivativePriceTypeID int
select @dtDate_Local = @dtDate
,@vcPriceType_Local = @vcPriceType
,@iTradingStrategyID_Local = @iTradingStrategyID
,@iAccountID_Local = @iAccountID
,@vcSymbol_Local = @vcSymbol
,@vcTradeSymbol_Local = @vcTradeSymbol
,@iDerivativeSymbolID_Local = @iDerivativeSymbolID
,@bExcludeZeroPriceTrades_Local = @bExcludeZeroPriceTrades