sql >> Database >  >> RDS >> Sqlserver

Parameter presteert niet zo goed als harde codering van de waarde

OVERZICHT BEWERKEN Op verzoek van Damien_The_Unbeliever

Het doel is om de beste/meeste informatie over de variabele waarde naar SQL te krijgen VOORDAT het plan wordt gemaakt, meestal doet parameter sniffing dit. Er kan een reden zijn dat het snuiven van parameters in dit geval 'uitgeschakeld' was. Zonder een betere weergave van de eigenlijke code te zien, kunnen we niet echt zeggen wat de oplossing is of waarom het probleem bestaat. Probeer de onderstaande dingen om de getroffen gebieden te dwingen plannen te maken met behulp van werkelijke waarden.

*LANGE VERSIE MET MEER DETAIL *

Is dit je daadwerkelijke opgeslagen proces? Heeft u standaardwaarden voor uw parameters? Zo ja, wat zijn dat?

Het snuiven van parameters kan helpen - maar het moet typische parameterwaarden hebben om het plan goed te maken, en zo niet, zal het niet echt helpen of zal het een slecht plan creëren op basis van de niet-typische parameterwaarde. Dus als een variabele de standaardwaarde null heeft of een waarde die geen typische waarde is de eerste keer dat deze wordt uitgevoerd en het plan wordt gecompileerd, wordt er een slecht plan gemaakt.

Als iemand anders deze sproc heeft geschreven, kan het zijn dat hij met een reden de parameter die met de lokale variabelen snuift, opzettelijk heeft 'uitgeschakeld'. Bedrijfsregels kunnen deze variabele structuren vereisen.

Het doel is om de beste/meeste informatie over de variabelewaarde naar SQL te krijgen VOORDAT het plan wordt gemaakt, en in het algemeen doet Parameter Sniffing dit. Maar er zijn dingen die ervoor kunnen zorgen dat het de prestaties negatief beïnvloedt, en dat is misschien de reden waarom het 'uitgeschakeld' is. Het lijkt er nog steeds op dat het plan wordt gemaakt met atypische waarden voor de parameters of nog steeds niet genoeg informatie - met behulp van parametersnuiven of niet.

Probeer de query in de sproc aan te roepen met Gebruik sp_executesql om de betreffende query's uit te voeren, en dwing het om een ​​plan voor dat gebied te genereren met de feitelijke variabelen, en kijk of het beter is. Dit kan uw oplossing zijn als u dit soort onregelmatige parameterwaarde moet hebben - maak opgeslagen procedures die de betrokken onderdelen uitvoeren en roep ze later op vanuit de opgeslagen procedure - nadat de variabele een typische waarde heeft ontvangen.

Zonder een betere weergave van de eigenlijke code te zien, is het moeilijk om te zien wat het probleem is. Hopelijk helpt deze info -



  1. Java-klassenpad kan MySQL-stuurprogramma niet vinden

  2. Aangepast SERIEEL / automatisch verhogen per groep waarden

  3. Hoe krijg ik ForeignCollection Field in Cursor in Ormlite

  4. Officiële Microsoft Access Tech Blog is nu online!