Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

ADO.NET chamando o procedimento armazenado T-SQL causa um SqlTimeoutException


Depois de determinar que é a conexão ADO.NET na raiz do problema, esse tópico me levou à resposta.

Basicamente as conexões através do Sql Server Management Studio (SSMS) por padrão têm SET ARITHABORT ON . As conexões ADO.NET não.

Configurando ARITHABORT OFF e executar a consulta diretamente pelo SSMS me dá o mesmo tempo de resposta lento.

A principal diferença ao executar com ou sem essa configuração é que um plano de consulta diferente é criado para as duas chamadas. Quando ARITHABORT estava OFF , o comando SSMS usaria o plano de consulta em cache pré-compilado que a conexão ADO.NET estava usando e, portanto, o tempo limite.

Ao executar os seguintes comandos como administrador no banco de dados, todas as consultas são executadas conforme o esperado, independentemente do ARITHABORT contexto.
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Só posso supor que um plano de consulta compilado ficou corrompido ou inválido.

Eu vou com isso como a solução (eu votei na resposta) no outro tópico

Obrigado.