Quando atualizar estatísticas?


42

Eu herdei um Plano de Manutenção que faz o seguinte:

  • Limpar dados antigos
  • Verifica a integridade do banco de dados
  • Executa backups de banco de dados e log de transações
  • Reorganiza nossos índices
  • Estatísticas de atualizações
  • Excluir backups antigos e arquivos do plano de manutenção

Do plano de manutenção de 23 minutos, a atualização das estatísticas leva 13 minutos. Durante esse período de 13 minutos, o acesso ao banco de dados é bloqueado (ou pelo menos a replicação desse banco de dados para os outros é interrompida).

Minha pergunta é:

Quando devemos atualizar as estatísticas e por quê?

Parece ser o tipo de coisa que deveríamos fazer com menos frequência do que todos os dias. Estou tentando nos tirar da mentalidade "apenas porque" de fazer manutenção desnecessária.


2
Com que frequência / como as linhas são inseridas / atualizadas / excluídas? Para mim, esse é o fator decisivo.
JNK

@JNK Inserimos ~ 70.000 linhas por dia em todo o banco de dados. Atualize ~ 100 linhas por mês.
Cebola-Knight

1 - Isso é mais relevante se soubermos por TABELA quantas linhas e 2 como porcentagem. 70k linhas por dia em uma tabela de 1m é uma diferente muito do que em uma tabela de 500m
JNK

Eu recomendaria usar algo como ola.hallengren.com/…, esta solução apenas reconstrói / reorganiza e atualiza o que é necessário, assim você pode diminuir o tempo que o seu plano de manutenção demora e também economizar muito espaço de log ..
Peter

Respostas:


28

Se você não possui a janela de manutenção, atualizar as estatísticas diariamente provavelmente é um pouco exagerado. Especialmente se você tiver as Estatísticas de Atualização Automática ativadas para o banco de dados. Na sua postagem original, você disse que os usuários estão vendo uma diminuição no desempenho devido a este plano de manutenção. Não há outro momento para executar este plano de manutenção? Nenhuma outra janela? Vejo que seu plano abrange a reorganização de índices. Quando você está reconstruindo índices? Quando essa operação acontece, as estatísticas são atualizadas automaticamente (desde que não estejam desativadas para o índice).

Exatamente com que frequência você deve atualizar as estatísticas depende muito da quantidade de modificação de dados que seus índices e dados estão recebendo . Se houver modificação muito pequena ( INSERT, UPDATE, DELETE) com os dados, então você pode ter um horário mais infrequente para o trabalho atualizar estatísticas.

Uma maneira de descobrir se suas estatísticas são obsoletas é examinar os planos de execução e se você estima que as linhas diferem muito das linhas reais retornadas, isso é uma boa indicação de que o intervalo precisa ser aumentado. No seu caso, você está indo para o outro lado e um pouco de julgamento pode ser necessário. Atualize as estatísticas semanalmente e, se você estiver começando a ver os sinais indicadores de estatísticas obsoletas, vá a partir daí.

Se você estiver usando as Estatísticas de Atualização Automática para seu banco de dados, consulte esta referência para o limite de quando as estatísticas são atualizadas.


Reconstruímos os índices uma vez por semana.
Cebola-Knight

5
@ Onion-Knight Então você também está atualizando as estatísticas uma vez por semana ao reconstruir seus índices. Isso pode ser suficiente se você estiver fazendo uma reconstrução geral do índice no banco de dados.
Thomas Stringer

25

Quando atualizar estatísticas?

se e somente se o recurso de estatísticas de atualização automática não for bom o suficiente para seus requisitos. Quer dizer, se as estatísticas de criação automática e atualização automática estão ativadas e você está recebendo um plano de consulta incorreto porque as estatísticas não são precisas ou atuais, pode ser uma boa idéia ter controle sobre a criação e atualização de estatísticas. mas se você estiver bem com o desempenho do servidor sql e os tempos de execução da consulta.

sugiro interromper o comando Estatísticas de Atualizações dos seus Planos de Manutenção

atualizar estatísticas é importante e útil 1. permite que o otimizador de consultas do SQL Server produza bons planos de consulta de forma consistente, mantendo baixos os custos de desenvolvimento e administração 2. As estatísticas são usadas pelo otimizador de consultas para estimar a seletividade das expressões e, portanto, o tamanho do intermediário e resultados finais da consulta. 3. Boas estatísticas permitem que o otimizador avalie com precisão o custo de diferentes planos de consulta e escolha um plano de alta qualidade


Se você deseja atualizar as estatísticas manualmente, você deve saber primeiro Quando as estatísticas são atualizadas automaticamente

Se o otimizador de consulta do SQL Server exigir estatísticas para uma coluna específica em uma tabela que passou por uma atividade substancial de atualização desde a última vez em que as estatísticas foram criadas ou atualizadas, o SQL Server atualiza automaticamente as estatísticas, amostrando os valores da coluna (usando as estatísticas de atualização automática) . A atualização automática de estatísticas é acionada pela otimização de consulta ou pela execução de um plano compilado e envolve apenas um subconjunto das colunas mencionadas na consulta. As estatísticas são atualizadas antes da compilação da consulta se AUTO_UPDATE_STATISTCS_ASYNC estiver desativado

aqui estão bons artigos que falam sobre quando as estatísticas de atualização são acionadas no SQL Server

  1. da seção 13. Quando a atualização automática para estatísticas é acionada?
  2. Seção support.microsoft : Automatizando a determinação de Autostats
  3. Seção msdn.microsoft : Mantendo estatísticas no SQL Server 2008

depois de saber quando as estatísticas são acionadas, ajudará você a decidir quando atualizar as estatísticas manualmente

Para saber mais sobre estatísticas e seu efeito no desempenho, recomendo o BrentOzar e Kimberly em sqlskills muito bons blogs e blogueiros.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.