Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 22757|Svar: 0

[Kilde] Løser problemet med, at lagrede procedurer udføres hurtigt, men programkald er langsomme

[Kopier link]
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)
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com