|
|
Opslået på 21/05/2018 13.55.48
|
|
|

I de sidste to dage er jeg stødt på et problem, der er ret frustrerende: En lagret procedure på omkring 120 linjer bliver kørt i forespørgselsanalysatoren i SQL Server 2012. Hastigheden er meget ideel, og omkring 500 dataposter kan filtreres og indfanges på under 1 sekund. Men når forbindelsen kaldes i C#-programkoden, bliver forbindelsestimeout bedt om. Sæt CommandTimeout til 300, og det vil tage cirka 3 minutter at vise. Jeg tjekkede koden flere gange og fandt ingen fejl. Problemet er stadig.
Årsagsanalyse: 1. Fordi eksekveringshastigheden i forespørgselsanalysatoren er hurtig, og mængden af data ikke er stor. 2. Kun opkald i programmet er langsomt. 3. Sæt CommandTimeout-parameteren, og resultatet kan vises, men det vil tage lang tid.
Sammenfattende konkluderes det foreløbigt, at problemet ligger i C#-koden. Men der var ingen gevinst efter inspektionen.
Tjek denne information om Baidu. Endelig fandt jeg et lignende informationsopslag på CSDN-forummet. En af netbrugerne sagde i svaret: "Det er muligt, at implementeringsplanen er udløbet". Det vækkede mig virkelig i min drøm.
Udfør straks på forespørgselsanalysatoren:
Da jeg testede programmet igen, virkede det endelig. Hastigheden er meget tilfredsstillende.
Årsagsanalyse: Da lagrede procedurer er forudkompilerede, genereres en eksekveringsplan ved første eksekvering, og denne eksekveringsplan bruges ved efterfølgende eksekveringer (medmindre den lagrede procedure specificeres til at blive genkompileret), i stedet for at generere en eksekveringsplan hver gang den udføres. Når objektstrukturen i den lagrede procedure justeres, eller de relaterede data ændres betydeligt, hvilket kan gøre den oprindelige plan uegnet til den nuværende status quo (udløb af eksekveringsplanen), bør den lagrede procedure genkompileres.
Endelig vedhæfter du koden til den gemte procedure:
|
Tidligere:Del en enkelt APP-kampagnesidekode som kilde, adaptiv, meget smuk og generøs!Næste:C# Open Source-rammeværk (Genoptryk)
|