|
|
Veröffentlicht am 21.05.2018 13:55:48
|
|
|

In den letzten zwei Tagen bin ich auf ein ziemlich frustrierendes Problem gestoßen: Eine gespeicherte Prozedur von etwa 120 Zeilen wird im Abfrageanalysator von SQL Server 2012 ausgeführt. Die Geschwindigkeit ist sehr ideal, und etwa 500 Datensätze können in weniger als einer Sekunde gefiltert und erfasst werden. Wenn jedoch im C#-Programmcode aufgerufen wird, wird das Verbindungs-Timeout angezeigt. Stell die CommandTimeout auf 300 ein, und die Anzeige dauert etwa 3 Minuten. Ich habe den Code mehrmals überprüft und keine Fehler gefunden. Das Problem bleibt bestehen.
Ursachenanalyse: 1. Weil die Ausführungsgeschwindigkeit im Abfrageanalysator hoch ist und die Datenmenge nicht groß ist. 2. Nur der Anruf des Programms ist langsam. 3. Setze den CommandTimeout-Parameter, und das Ergebnis kann angezeigt werden, aber es dauert lange.
Zusammenfassend wird vorläufig geschlossen, dass das Problem im C#-Code liegt. Aber nach der Inspektion gab es keinen Gewinn.
Überprüfen Sie diese Informationen über Baidu. Endlich habe ich einen ähnlichen Informationsbeitrag im CSDN-Forum gefunden. Einer der Internetnutzer antwortete: "Es ist möglich, dass der Umsetzungsplan abgelaufen ist." Es hat mich in meinem Traum wirklich geweckt.
Führen Sie sofort den Abfrageanalysator aus:
Als ich das Programm erneut testete, funktionierte es diesmal endlich. Die Geschwindigkeit ist sehr zufriedenstellend.
Ursachenanalyse: Da gespeicherte Prozeduren vorkompiliert sind, wird bei der ersten Ausführung ein Ausführungsplan erstellt, der bei nachfolgenden Ausführungen verwendet wird (sofern die gespeicherte Prozedur nicht neu kompiliert werden soll), anstatt bei jeder Ausführung einen Ausführungsplan zu erstellen. Wenn die Objektstruktur des gespeicherten Verfahrens angepasst wird oder sich die zugehörigen Daten erheblich ändern, was dazu führen kann, dass der ursprüngliche Plan für den aktuellen Status quo ungeeignet ist (Ausführungsplan-Ablauf), sollte das gespeicherte Verfahren neu kompiliert werden.
Fügen Sie schließlich den Code für das gespeicherte Verfahren an:
|
Vorhergehend:Teilen Sie einen einzigen APP-Werbeseitencode, adaptiv, sehr schön und großzügig!Nächster:C# Open-Source-Framework (Nachdruck)
|