Muitas vezes descobri que, quando estou tendo problemas de desempenho em meu banco de dados MSSQL, posso resolvê-los executando sp_UpdateStats
. Aprendi isso porque essa é sempre a primeira linha de defesa do suporte técnico, logo após: "Seu computador está ligado?"
Meu entendimento é que o SQL Server deve manter as estatísticas automaticamente; Eu não deveria precisar cuidar dele. Então eu gostaria de entender: que circunstâncias podem levar as estatísticas a ficarem tão desatualizadas que eu precise atualizá-las manualmente?
À medida que os dados em uma tabela mudam, os objetos de estatísticas que representam a distribuição de dados ficam desatualizados. Isso é um problema porque são os objetos de estatísticas que o otimizador usa para fazer suas estimativas ao criar planos de execução. Se essas estimativas forem imprecisas, seu desempenho será prejudicado.
O SQL Server atualiza automaticamente os objetos de estatísticas quando a quantidade de dados na tabela que foi alterada atinge determinados limites, mas se você tiver dados que mudam com frequência ou tabelas com milhões de linhas, será melhor executar a manutenção regular do índice.
Isso pode ser feito com planos ou scripts de manutenção. O conjunto de scripts de Ola Hallengren é muito bom para isso e é algo que utilizo em todos os meus ambientes. Há também a suíte Minionware que não usei pessoalmente, mas ouvi coisas boas.
Essas duas respostas do Stack Overflow são muito boas:
Resumo:
Assim, você pode correr
UPDATE STATS
todos os dias e pode não fazer nada. Eu corro minhas estatísticas de atualização quando reorganizo meus índices uma vez por semana. Eu faço isso no fim de semana um pouco mais cedo para que ninguém reclame se o sistema ficar lento. Até agora, isso funcionou para mim e quase não tenho problemas.Basicamente, só faz sentido quando seus dados mudam com mais frequência do que a taxa de estatísticas automáticas.