Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

ADO.NET, das eine gespeicherte T-SQL-Prozedur aufruft, verursacht eine SqlTimeoutException

Nachdem ich festgestellt hatte, dass die ADO.NET-Verbindung die Ursache des Problems ist, führte mich dieser Thread zur Antwort.

Grundsätzlich haben Verbindungen über Sql Server Management Studio (SSMS) standardmäßig SET ARITHABORT ON . ADO.NET-Verbindungen nicht.

ARITHABORT OFF einstellen und die Ausführung der Abfrage direkt über SSMS gibt mir die gleiche langsame Antwortzeit.

Der Hauptunterschied bei der Ausführung mit oder ohne diese Einstellung besteht darin, dass für die beiden Aufrufe ein anderer Abfrageplan erstellt wird. Wenn ARITHABORT war OFF , würde der SSMS-Befehl den vorkompilierten zwischengespeicherten Abfrageplan verwenden, den die ADO.NET-Verbindung verwendet, und daher eine Zeitüberschreitung.

Durch Ausführen der folgenden Befehle als Administrator auf der Datenbank werden alle Abfragen wie erwartet ausgeführt, unabhängig vom ARITHABORT Einstellung.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Ich kann nur davon ausgehen, dass ein kompilierter Abfrageplan beschädigt oder ungültig wurde.

Ich werde dies als Lösung (ich habe die Antwort positiv bewertet) im anderen Thread verwenden

Danke.