Estou usando SQL SERVER 2012
tenho meu Auto Update Stats
ON no meu banco de dados.
No link abaixo, aprendi que as estatísticas de atualização automática serão acionadas para cada SQRT(1000 * Table rows)
alteração nas linhas da tabela.
https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/
Criei uma tabela com 1000 registros
SELECT TOP 500 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
name
INTO stst
FROM sys.objects
Criando estatísticas
CREATE STATISTICS rn
ON stst (rn)
CREATE STATISTICS name
ON stst (name)
Verificando as estatísticas criadas
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
De acordo com a fórmula
select SQRT(1000 * 500) -- 707.106781186548
Portanto, se eu adicionar/modificar 707.106781186548
registros em minha tabela, as estatísticas de atualização automática devem disparar
Adicione 1000
mais registros à minha tabela, o que deve ser mais do que suficiente para dispararauto update stats
INSERT INTO stst(rn,name)
SELECT TOP 1000 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
a.name
FROM sys.objects a
Para disparar oauto update stats
Select * from stst
Verificando as estatísticas
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
Infelizmente ainda Rows
é o 500
único.
Mesmo depois de inserir 1000
registros em minha tabela, o que é obviamente maior do que 707.106781186548
durante a execução, SELECT
por que as estatísticas de atualização automática não dispararam? O que estou perdendo aqui
O novo cálculo só é usado se o sinalizador de rastreamento 2371 estiver ativado, exceto no SQL Server 2016, quando o nível de compatibilidade do banco de dados de contexto é definido como 130, onde é o comportamento padrão. Consulte Microsoft KB 2754171:
Controlando o comportamento do Autostat (AUTO_UPDATE_STATISTICS) no SQL Server
As estatísticas não são atualizadas quando os dados são modificados. Uma atualização de estatísticas é acionada quando a otimização baseada em custo descobre que estatísticas interessantes para a consulta estão obsoletas.
O otimizador não insere otimização baseada em custo para consultas muito simples ("triviais"), em que um único plano óbvio é sempre ideal. Nenhuma atualização de estatísticas ocorre nesse cenário.
Consulte o White Paper da Microsoft Planejar Cache e Recompilação no SQL Server 2012 por Greg Low.