|
|
Opublikowano 21.05.2018 13:55:48
|
|
|

W ciągu ostatnich dwóch dni napotkałem dość frustrujący problem – procedura przechowywana składająca się z około 120 linii jest wykonywana w analizatorze zapytań SQL Server 2012, Prędkość jest bardzo idealna, a około 500 rekordów danych można przefiltrować i przechwycić w mniej niż 1 sekundę. Jednak po wywołaniu w kodzie programu C# pojawia się wygaśnięcie czasu połączenia. Ustaw CommandTimeout na 300, a wyświetlenie zajmie około 3 minut. Sprawdzałem kod kilka razy i nie znalazłem żadnych błędów. Problem pozostaje.
Analiza przyczyn: 1. Ponieważ szybkość wykonania w analizatorze zapytań jest szybka, a ilość danych nie jest duża. 2. Tylko połączenie programu jest wolne. 3. Ustaw parametr CommandTimeout, a wynik może być wyświetlany, ale zajmie to dużo czasu.
Podsumowując, wstępnie stwierdzamy, że problem leży w kodzie C#. Ale po inspekcji nie było żadnych korzyści.
Sprawdź te informacje o Baidu. W końcu znalazłem podobny post informacyjny na forum CSDN. Jeden z internautów odpowiedział: "Możliwe, że plan wdrożenia wygasł", Naprawdę mnie to obudziło we śnie.
Wykonaj natychmiast na analizatorze zapytań:
Testując program ponownie, tym razem w końcu zadziałał. Prędkość jest bardzo satysfakcjonująca.
Analiza przyczyn: Ponieważ procedury przechowywane są wstępnie kompilowane, plan wykonania jest generowany przy pierwszym wykonaniu, a ten plan jest stosowany przy kolejnych wykonaniach (chyba że procedura przechowywana jest określona do rekompilacji), zamiast generować plan wykonania za każdym razem. Gdy struktura obiektu w procedurze przechowywanej zostaje dostosowana lub powiązane dane ulegają znacznym zmianom, co może sprawić, że pierwotny plan nie będzie odpowiedni dla obecnego status quo (wygaśnięcie planu wykonawczego), procedura przechowywana powinna zostać ponownie skompilowana.
Na koniec dołącz kod procedury przechowywanej:
|
Poprzedni:Podziel się jednym kodem strony promocyjnej APP, adaptacyjnym, bardzo pięknym i hojnym!Następny:C# Open Source Framework (wznowienie)
|