Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

ADO.NET appelant la procédure stockée T-SQL provoque une exception SqlTimeoutException

Une fois que j'ai déterminé que c'est la connexion ADO.NET à l'origine du problème, ce fil m'a conduit à la réponse.

Fondamentalement, les connexions via Sql Server Management Studio (SSMS) ont par défaut SET ARITHABORT ON . Les connexions ADO.NET ne le font pas.

Réglage ARITHABORT OFF et l'exécution de la requête directement via SSMS me donne le même temps de réponse lent.

La principale différence lors de l'exécution avec ou sans ce paramètre est qu'un plan de requête différent est créé pour les deux appels. Lorsque ARITHABORT était OFF , la commande SSMS utiliserait le plan de requête mis en cache précompilé que la connexion ADO.NET utilisait, et donc expirerait.

En exécutant les commandes suivantes en tant qu'administrateur sur la base de données, toutes les requêtes s'exécutent comme prévu, quel que soit le ARITHABORT réglage.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Je ne peux que supposer qu'un plan de requête compilé est devenu corrompu ou invalide.

J'irai avec cela comme solution (j'ai voté pour la réponse) sur l'autre fil

Merci.