Estou tentando executar algumas análises sobre índices ausentes em um servidor (nunca fiz isso neste servidor antes). Eu estava executando sp_blitzindex e ele desligava em "Inserindo dados em #MissingIndexes". Pesquisei na consulta e encontrei onde ela atinge sys.dm_db_missing_index_details.
Tentar selecionar em sys.dm_db_missing_index_details retornará cerca de 300 registros e, em seguida, ele ficará sentado e girando. Eu não queria deixá-lo continuar para ver quanto tempo levaria para terminar, mas deixei correr por mais de dois minutos e não foi concluído.
Por que isso levaria muito tempo para retornar? O que causaria isso?
Parece que outras sessões estão bloqueando a exibição de gerenciamento dinâmico.
CREATE TABLE
eDROP TABLE
forçar uma atualização nas tabelas internas mantidas para osys.dm_db_missing_index_details
.Consegui recriar um cenário de bloqueio em que uma transação aberta impede leituras em arquivos
sys.dm_db_missing_index_details
. Execute isso em uma janela do SSMS em sua máquina de desenvolvimento:Agora, em outra janela do SSMS, execute o seguinte (pode ser necessário executá-lo várias vezes, dependendo de quão rápido você for!)
Para mim, a consulta acima bloqueia até eu confirmar ou reverter a transação iniciada na primeira janela de consulta, com:
ou
Infelizmente, executar
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
antes da consultasys.dm_db_missing_index_details
não ajuda; ele ainda bloqueia até que a transação aberta seja confirmada ou revertida.