Usando sp_WhoIsActive, vejo que tenho muitos processos em status "adormecido", vários por horas. Não tenho certeza da causa e ainda estou solucionando o problema (tempo limite? código incorreto com transação não confirmada?).
Usando a consulta abaixo, notei que todas essas transações abertas são consultas SELECT em um status "dormindo". Por que um SELECT abriria uma transação? Eles podem estar no meio de um procedimento armazenado em algum lugar e o campo [TEXT] está mostrando apenas a última instrução do procedimento que foi executado? Não há wait_info em nenhuma das transações abertas.
SELECT [TEXT] as SQLcode
FROM SYS.SYSPROCESSES SP
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(SP.[SQL_HANDLE])AS DEST WHERE OPEN_TRAN=1
Dormir não é necessariamente um problema. Dependendo do aplicativo, o pool de threads pode manter a conexão aberta mesmo que nada esteja sendo executado.
Se não houver transações abertas, isso é realmente um problema?
Kendra Little escreveu sobre isso recentemente em seu blog :
De acordo com a sugestão de Kenda, dê uma olhada em sp_whoisactive em vez de usar sp_who2.
que tal você começar a usar esta consulta abaixo e adaptá-la para seus próprios propósitos:
Eu uso este abaixo, ajuda na maioria dos casos: