Atualmente no meu servidor de banco de dados é muito lento. Corrida,
EXEC sp_WhoIsActive
@find_block_leaders = 1,
@sort_order = '[blocked_session_count] DESC'
Às vezes ficamos abaixo do erro,
Msg 530, Level 16, State 1, Procedure sp_WhoIsActive, Line 4316 [Batch Start Line 17]
The statement terminated. The maximum recursion 100 has been exhausted before statement completion.
e quando é executado, block_session_count para um número maior, mas blocking_session_id é NULL. Algo está bloqueando e não consigo descobrir.
Também correndo,
SELECT COUNT(*),log_reuse_wait_desc FROM master.sys.databases group by log_reuse_wait_desc
retorna | 60 | LOG_BACKUP|
Quando faço failover, ele começa a funcionar, mas não posso continuar fazendo failover.
Os bloqueadores de leads geralmente não estão sendo bloqueados - eles estão causando o bloqueio porque estão em execução por um longo tempo esperando outra coisa ou dormindo e esperando outra instrução. Durante esse tempo eles estão segurando fechaduras. Observe que as esperas de bloqueio vêm do bloqueio, não da obtenção de bloqueios .
WhoIsActive apenas ordena (no seu cenário) por quais sessões têm as sessões mais bloqueadas sob elas. Eles podem ser totalmente independentes. O que você provavelmente está procurando é algo que percorra a cadeia de bloqueio para mostrar o bloqueador de leads e, em seguida, todas as sessões bloqueadas.
Alguns scripts úteis para isso estão aqui: