Estou curioso, uma das edições corporativas do SQL 2012 com 128 GB de tamanho de RAM do banco de dados tem 370 GB e uma quantidade crescente de memória usada pelo funcionário da memória de bloqueios (OBJECTSTORE_LOCK_Manager) mostrando 7466016 KB. Também posso confirmar que, olhando para o contador perfselect * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)'
No entanto, quando executo a consulta
select count(*) from sys.dm_tran_locks
mostra apenas 16 bloqueios. Então, o que está usando mais de 7 GB de bloqueios. Tem alguma maneira de descobrir?
Isso significa que, uma vez que a memória dos bloqueios foi alocada, o SQL ainda não a desalocou? Nas últimas 1 hora, não vejo a contagem de bloqueios superior a 500, mas a memória de bloqueio permanece a mesma.
A memória máxima do servidor é de 106 GB. Não usamos páginas bloqueadas na memória e não vejo pressão na memória ou erros no log de erros nas últimas 12 horas. O contador de MBytes disponíveis mostra mais de 15 GB de memória disponível.
O monitor de atividades mostra consistentemente 0 tarefas em espera, portanto, obviamente, não há bloqueio.
Considerando que o bloqueio do servidor SQL ocupa cerca de 100 bytes de memória, 7 GB são muita memória e tentamos descobrir quem o está usando.
Eu executo uma transação superior do relatório do painel de controle do servidor por contagem de bloqueios: "Atualmente, nenhuma transação de bloqueio está em execução no sistema. No entanto, a memória de bloqueio ainda é exibida conforme indicado acima. O banco de dados está mais ocupado durante a noite.