sql >> Base de Datos >  >> RDS >> Sqlserver

ADO.NET llamando al procedimiento almacenado T-SQL provoca una SqlTimeoutException

Una vez que determiné que la raíz del problema es la conexión ADO.NET, este hilo me llevó a la respuesta.

Básicamente, las conexiones a través de Sql Server Management Studio (SSMS) por defecto tienen SET ARITHABORT ON . Las conexiones ADO.NET no.

Configuración de ARITHABORT OFF y ejecutar la consulta directamente a través de SSMS me da el mismo tiempo de respuesta lento.

La principal diferencia cuando se ejecuta con o sin esta configuración es que se crea un plan de consulta diferente para las dos llamadas. Cuando ARITHABORT estaba OFF , el comando SSMS usaría el plan de consulta en caché precompilado que estaba usando la conexión ADO.NET y, por lo tanto, se agotaría el tiempo de espera.

Al ejecutar los siguientes comandos como administrador en la base de datos, todas las consultas se ejecutan como se esperaba, independientemente del ARITHABORT ajuste.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Solo puedo asumir que un plan de consulta compilado se corrompió o no fue válido.

Iré con esto como la solución (he votado a favor de la respuesta) en el otro hilo

Gracias.