Consultar o número de bloqueios mantidos me dá um número na casa das centenas:
SELECT count(*) from
SYS.dm_tran_locks
Mas consultar o contador de desempenho 'Bloqueios de bloqueio' me dá um número na região de 45.000.
SELECT object_name, counter_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE [counter_name] in ('Lock Blocks', 'Lock Blocks Allocated', 'Lock Memory (KB)', 'Lock Owner Blocks')
Os blocos de bloqueio são definidos pela Microsoft como:
Especifica o número atual de blocos de bloqueio em uso no servidor (atualizados periodicamente). Um bloco de bloqueio representa um recurso bloqueado individual, como uma tabela, página ou linha.
Então eu esperaria que os números fossem os mesmos, ou pelo menos na mesma faixa. Meu entendimento está obviamente faltando em algum lugar, então estou tentando entender isso melhor. Qualquer ajuda seria apreciada.
Maçãs e laranjas.
sys.dm_tran_locks é um DMV em nível de banco de dados onde "Cada linha representa uma solicitação atualmente ativa para o gerenciador de bloqueio para um bloqueio que foi concedido ou está aguardando para ser concedido."
Os contadores de desempenho são de instância inteira e estão em "SQLServer:Memory Manager" e mostram os detalhes de alocação de memória para o gerenciador de bloqueio. O gerenciador de bloqueio é crítico para o desempenho e, portanto, não aloca memória para cada nova solicitação de bloqueio separadamente. Portanto, leia isso como o atual ponto alto da memória alocada para o gerenciamento de bloqueio.