Existe alguma diferença entre atualizar as estatísticas de uma tabela usando sp_updatestats
sem reamostragem e atualizar as estatísticas da tabela usando UPDATE STATISTICS
semsample options(FULLSCAN,SAMPLE PERCENT,RESAMPLE)
exec sp_updatestats vs atualização de estatísticas tablename
atualizar as tabelas usando sp_updatestats
o valor padrão NO
atualizará as estatísticas com a taxa de amostragem padrão.
da mesma forma, atualizar as estatísticas da tabela usando UPDATE STATISTICS
sem sample options(FULLSCAN,SAMPLE PERCENT,RESAMPLE)
também atualizará as estatísticas da tabela com a amostragem padrão.
Então, há alguma diferença entre os dois métodos? Estou perdendo alguma coisa aqui?
Atualizar :
Eu sei que sp_updatestats
roda em todas as tabelas, mas usando UPDATE STATISTICS
podemos atualizar as estatísticas de uma tabela específica.
Somando ao que já foi mencionado pelo @Gameiswar, a outra diferença que eu conheço com
sp_updatestats
, quando você executa para todas as tabelas do banco de dados ele APENAS atualiza as estatísticas das tabelas que tem pelo menos uma linha alterada. BOL dizPortanto, quando você executa sp_updatestats e diz que as estatísticas de todas as tabelas foram atualizadas, isso é incorreto/enganoso apenas para tabelas que têm pelo menos uma linha alterada quando as estatísticas foram atualizadas.
Ao usar UPDATE STATISTICS, você tem muitas opções para usar para atualização de estatísticas.
Além disso, quando você recria o índice com verificação completa ou com opções padrão, as estatísticas são atualizadas para esse índice, portanto, não há necessidade de reconstruir as estatísticas novamente.
PS: Qualquer que seja a diferença, eu não usaria sp_updatestats, pois o mecanismo que ele usa para atualizar as estatísticas não é bom, por que eu deveria atualizar as estatísticas da tabela se apenas uma linha mudou e eu tenho 100 mil linhas na tabela, apenas consumirá recursos e causar mais problemas.
EDITAR:
Se você deseja atualizar as estatísticas seletivamente e não deseja executar sp_updatestas, use a consulta abaixo para filtrar estatísticas desatualizadas. Esta consulta usa DMF e funcionaria de
SQL Server 2008 R2 SP2 , SQL Server 2012 Sp1 and above
, Copiado do blog de Erin StellatoNOTA : Perceba que tabelas diferentes podem ter limites diferentes e você precisará ajustar a consulta acima para seus bancos de dados. Para algumas tabelas, esperar até que 15% ou 20% das linhas tenham sido modificadas pode ser aceitável. Mas para outros, pode ser necessário atualizar em 10% ou até 5%, dependendo dos valores reais e de sua inclinação.
Se você quiser evitar todos esses problemas, você também pode usar o script de atualização de estatísticas Ola Hallengren, que cuida de muitas dessas coisas.
O código para
sp_updatestats
é bastante simples, você pode vê-lo criando uma cópia do banco demssqlsystemresource
dados. Basta copiar os arquivos mdf e ldf em algum lugar e anexá-los como um banco de dados com outro nome.Como pode ser visto em BOL a instrução leva 1 parâmetro, reamostra:
Não acho uma boa ideia postar todo o procedimento aqui, você mesmo pode dar uma olhada, mas basicamente é um procedimento simples.
Dentro do procedimento, ele faz um loop sobre as tabelas no banco de dados, faz algumas verificações básicas, como verificar se uma tabela não tem seu índice clusterizado desabilitado, verifica se uma tabela é hekathon (para determinar se a lista de estatísticas em uma tabela deve ser lido de sys.stats ou sys.indexes), verifica se é uma tabela hekathon novamente para adicionar fullscan no caso de uma tabela hekathon e, em seguida, executa uma simples UPDATE STATISTICS.
Basicamente, uma dessas três instruções é executada em todas as estatísticas do seu banco de dados
Exceto se as estatísticas tiverem estatísticas automáticas desabilitadas, também adiciona uma
NORECOMPUTE
cláusulaPortanto, não há muita diferença entre simplesmente chamar um
UPDATE STATISTICS
em cada uma de suas estatísticas se elas não tiverem estatísticas automáticas desabilitadas e não estiverem em tabelas com otimização de memória.Existem diferenças em como os usamos ..
Sp_updatestats:
sp_updatestats executa UPDATE STATISTICS, especificando a palavra-chave ALL, em todas as tabelas internas e definidas pelo usuário no banco de dados. Não podemos pedir ao SQL para atualizar apenas estatísticas para uma única tabela/índice usando esta opção,
Estatísticas de atualização:
Com Estatísticas de atualização, você pode atualizar estatísticas por tabela/índice.
Se 'reamostragem' não for especificado, sp_updatestats atualizará as estatísticas usando a amostragem padrão.
Para estatísticas de atualização, quando nenhuma das opções de amostra (SAMPLE, FULLSCAN, RESAMPLE) for especificada, o otimizador de consulta amostrará os dados e calculará o tamanho da amostra por padrão.
A taxa de amostragem de SP_Updatestats é muito baixa, como 0,05%. Especialmente em VLDBs É aconselhável usar estatísticas de atualização do DBCC em cada tabela para atualizar as estatísticas com amostragem apropriada. O melhor seria executar estatísticas de atualização do DBCC com verificação completa. Se isso não for possível, use taxa de amostragem de 25%.