Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

ADO.NET che chiama la stored procedure T-SQL provoca un'eccezione SqlTimeoutException

Una volta determinato che è la connessione ADO.NET alla radice del problema, questo thread mi ha portato alla risposta.

Fondamentalmente le connessioni tramite Sql Server Management Studio (SSMS) per impostazione predefinita hanno SET ARITHABORT ON . Le connessioni ADO.NET no.

Impostazione di ARITHABORT OFF e l'esecuzione della query direttamente tramite SSMS mi dà lo stesso tempo di risposta lento.

La differenza principale durante l'esecuzione con o senza questa impostazione è che viene creato un piano di query diverso per le due chiamate. Quando ARITHABORT era OFF , il comando SSMS utilizzerà il piano di query memorizzato nella cache precompilato utilizzato dalla connessione ADO.NET e quindi il timeout.

Eseguendo i seguenti comandi come amministratore sul database, tutte le query vengono eseguite come previsto indipendentemente da ARITHABORT impostazione.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Posso solo presumere che un piano di query compilato sia diventato danneggiato o non valido.

Andrò con questa come soluzione (ho votato positivamente la risposta) sull'altro thread

Grazie.