Meu cliente percebeu que há conexões abertas, mas nunca fechadas e, como resultado, as solicitações de API estão expirando, pois estão sendo bloqueadas por um processo "fantasma".
Exemplo na tabela Cliente:
O processo com o número 108 bloqueia outro processo. Ao executar SP_WHO2 estou conseguindo isso:
SPID STATUS LOGIN Hostname BLKBy DBNAME Command .... - PROGRAMNAME
108 - SLEEPING - Auser - . - . - DBNAme - AWAITING COMMAND ... (Nothing here).
O script que está sendo bloqueado é um simples
Select Custid, name....
from Customer
Where custid = 1
Pensei em uma indexação ruim, mas existem índices úteis aí.
O que devo fazer para examinar o problema? Como vou descobrir como essas conexões são criadas e não fechadas?
Uma conexão inativa que bloqueia outras consultas indica uma transação não confirmada na sessão que contém bloqueios. Isso pode ser observado com:
Transações de longa duração em sessões sem atividade recente sugerem um problema com o gerenciamento de conexão/transação no código do aplicativo ou design inadequado do aplicativo (por exemplo, aguardando a ação do usuário durante uma transação). Os aplicativos devem confirmar/reverter transações imediatamente após a conclusão do trabalho como prática recomendada para maximizar a simultaneidade.
A única coisa que pode ser feita no lado do servidor é encerrar a sessão, embora seja necessário entender as implicações de fazer isso. O problema provavelmente surgirá novamente até que o código seja corrigido.