Temos uma tabela com 190 milhões de registros. há um índice em uma coluna bastante exclusiva, mas ainda assim, se eu executar uma consulta na tabela selecionando os 10 primeiros com apenas a coluna indexada na cláusula where e select, ela ainda levará muito tempo para ser concluída.
Se eu ativar o plano de consulta ao vivo, o sql server mostra o botão giratório de espera 'esperando pelo plano de consulta'. Se a consulta finalmente terminar e se eu executá-la novamente, ela será concluída instantaneamente. o plano de consulta está demorando o tempo todo, mas não consigo reproduzir executando DBCC FREEPROCCACHE antes da consulta. Depois de um tempo, o mesmo problema ocorrerá novamente.
Nota: O banco de dados possui 2 grupos de arquivos. Índices e bancos de dados do sistema são armazenados no disco SSD, enquanto os dados normais da tabela são armazenados em um disco não SSD.
Talvez as estatísticas de atualização automática tenham sido ativadas.
AUTO_UPDATE_STATISTICS_ASYNC ON
É seu amigo nesse caso. Verifique a data das estatísticas do índice para ver se coincide com a lentidão:-- dan-guzman
Se não for a geração do plano (
SET STATISTICS TIME ON
pode ser revelador) ou o processamento da consulta em si (lendo apenas algumas linhas com um índice bastante exclusivo), então a coisa natural a suspeitar é o bloqueio. - tibor-karasziExistem várias maneiras de monitorar eventos de atualização de estatísticas (profiler, eventos estendidos...). O SQL Server 2019 apresenta o
WAIT_ON_SYNC_STATISTICS_REFRESH
tipo de espera, que pode aparecer na seção de informações de espera dos planos de execução 'reais'.O Sentry One Plan Explorer captura estatísticas de construção e atualização (statman) e inclui essas informações nas informações de espera.