Recentemente, mudamos nosso banco de dados para um novo servidor
O servidor antigo estava em execução
Microsoft SQL Server 2017 (RTM-CU16) (KB4508218) - 14.0.3223.3 (X64) Jul 12 2019 17:43:08
Copyright (C) 2017 Microsoft Corporation
Express Edition (64-bit) on Linux (Ubuntu 16.04.6 LTS)
O novo servidor está em execução
Microsoft SQL Server 2019 (RTM-CU2) (KB4536075) - 15.0.4013.40 (X64) Feb 3 2020 16:40:57
Copyright (C) 2019 Microsoft Corporation
Express Edition (64-bit) on Linux (CentOS Linux 8 (Core))
Temos um serviço Windows C# que usa o banco de dados. Ele está parando intermitentemente ou executando extremamente lento.
O serviço do Windows está usando .Net Framework 4.7.2 e chama uma biblioteca escrita em .net padrão 2.0 que também faz chamadas sql.
Encontrei esta pergunta sobre por que o status de um SPID está suspenso e vejo que nossos Spids Suspensos têm wait_type ASYNC_NETWORK_IO
De acordo com os documentos isso
Ocorre em gravações de rede quando a tarefa é bloqueada atrás da rede. Verifique se o cliente está processando dados do servidor.
Reiniciar o serviço do Windows resolve temporariamente o problema. No entanto, isso não me ajuda a solucionar a causa do problema.
Principalmente eu estou usando EntityFramework 6.4
[Atualizar]
eu passei a correr
dbcc inputbuffer(sessionId)
para ver o último SQL em execução
ASYNC_NETWORK_IO
geralmente indica que o SQLServer tem resultados prontos para retornar ao cliente, mas o cliente não os está solicitando tão rápido quanto o SQLServer pode entregá-los ou a rede está ficando lenta.Um cenário comum com C# é se você estiver consumindo resultados por meio
IEnumerable<>
de um monte de processamento lento por linha proveniente do banco de dados. Se você não estiver retornando milhões de linhas, tente colocar um.ToList()
ou algo lá para armazenar em buffer todos os resultados do banco de dados antes de processá-los.