Por que definir estatísticas de atualização automática como Falso?

10

Acabei de herdar cerca de 20 instâncias do SQL Server, como parte de um projeto de aquisição mais amplo. Estou avaliando o desempenho e não gosto da maneira como os planos de manutenção foram implementados.

Estou vendo reconstruções diárias de índices gerais (eu posso lidar com esta) e também atualização manual diária das estatísticas.

Cerca de metade dos bancos de dados foram configurados como Estatísticas de atualização automática = Falso, por motivos que não são claros além do que me disseram que é para reduzir 'Problemas de desempenho' ...

Eu sempre pensei e trabalhei nas melhores práticas de definir isso como True e senti que a Atualização Manual não era necessária se essa configuração fosse True. Estou errado?

Alguém pode explicar qual seria o benefício de ter esse conjunto como False, mas fazer uma atualização manual diária?

Devo mencionar que alguns dos bancos de dados são altamente transacionais (milhões de inserções, exclusões, atualizações por dia). Outros são baixos em termos de taxas de transação e alguns são apenas leitura. Não há rima ou motivo para definir a atualização automática definida como Falso. Parece ser uma loteria.

Molenpad
fonte

Respostas:

6

Você está correto, também acredito que, na maioria dos casos, o valor Auto Update statisticsdeve ser definido como verdadeiro. Deveremos permitir que o SQL Server decida quando atualizar as estatísticas e acredite que ele faz um bom trabalho. Quando definido como verdadeiro, verifique se as estatísticas são atualizadas sobre a distribuição de dados no campo, o que eventualmente ajudaria o otimizador a preparar um plano melhor. O importante a ser observado aqui é que as estatísticas de atualização automática são acionadas quando 20% dos dados são alterados na tabela. Portanto, você não deve sentir que em uma tabela com 100 mil linhas se 10 linhas forem atualizadas, a atualização de status será acionada.

Uma análise mais profunda é feita por Paul Randal no blog Entendendo quando as estatísticas serão atualizadas automaticamente . Não vi nenhuma desvantagem se essa opção estiver configurada como verdadeira. Sim, você pode ver alguma atividade de E / S quando esta opção estiver configurada como verdadeira.

Conclusão importante que se pode tirar do blog é

Mesmo que uma estatística fique desatualizada como resultado de uma modificação, ela não será atualizada automaticamente após a conclusão da modificação. A estatística será atualizada automaticamente na próxima vez que um plano de consulta a usar.

Nos casos em que você acabou de ler apenas bancos de dados ou bancos de dados em que você seleciona apenas a operação e não há operação DML, nesse caso, você pode manter a opção como falsa, mas novamente nenhum dano ocorrerá se você a mantiver verdadeira. Nós vemos principalmente banco de dados com certa quantidade de atividade.

Shanky
fonte
10

Isso é muito longo para um comentário. Por isso, vou falar com outro caso em que alguém pode querer desativar as estatísticas de atualização automática. Trabalhei com bancos de dados que suportam cargas de trabalho OLTP de alto volume e um SLA rigoroso de desempenho de consultas em milissegundos. Quase todas as consultas foram triviais, com muita atenção aos detalhes de ajuste de consultas e índices e algumas das tabelas eram bastante grandes. Não havia muito valor na atualização de estatísticas durante os períodos de pico nessa situação, e as estatísticas de atualização automática violariam o SLA. Conseqüentemente, a manutenção era feita durante períodos fora de pico por meio de um trabalho agendado.

Outra opção é ativar as opções AUTO_UPDATE_STATISTICSe AUTO_UPDATE_STATISTICS_ASYNCbanco de dados. Isso permitirá que as consultas prossigam com os planos de execução com base em estatísticas obsoletas, em vez de incorrer na sobrecarga da atualização de estatísticas de forma síncrona. Isso é especialmente apropriado para uma carga de trabalho OLTP, desde que o servidor seja dimensionado para acomodar a carga de trabalho da consulta mais a atualização das estatísticas em segundo plano.

Dan Guzman
fonte
Eu estava tentando pensar em um exemplo em que o auto_update_stats realmente causaria problemas e este é ótimo - eu recomendaria duas vezes (se pudesse) para a excelente solução alternativa, evitando o atraso normal das estatísticas que acompanharia um query
SqlRyan 4/16
11
Eu tive situações com bancos de dados maiores (VLDB), em que a opção de estatísticas auto_update está LIGADA e o SQL inicia durante momentos inoportunos do dia de trabalho. Eu o desliguei e tinha que ser mais estratégico sobre atualizações manuais para tabelas e estatísticas específicas, em vez de deixar o servidor determinar as tabelas e quando. Isso tornou meu sistema mais previsível, mas com um custo de gerenciamento mais alto (sem dúvida), mas precisava acontecer para evitar a intrusão de tarefas de atualização. Se você prefere "cobrir" o sistema com o gerenciamento típico de índices / estatísticas, deixe-o ligado. Caso contrário, algumas situações podem exigir uma estratégia detalhada.
SnapJag
6

Geralmente eu diria que ter estatísticas de atualização automática é benéfico. Mas, como em qualquer configuração, há motivos para você ativar ou desativar.

Uma é que algumas tabelas têm muita rotatividade e talvez as consultas não sejam muito sensíveis a estatísticas precisas. Pense em ETL ou outros cenários em massa em que você está alterando muitos dados, mas não está lendo a partir daí ou não está lendo muito. Não faz muito sentido ter atualizações automáticas de estatísticas e fazer com que várias E / S forneçam estatísticas mais precisas que nunca serão usadas.

Você também pode ter cenários em que atualiza dados várias vezes ao longo do dia, mas não necessariamente deseja atualizar as estatísticas após cada atualização. (Digamos que os dados sejam consultados apenas durante determinadas horas do dia - não é necessário atualizar as estatísticas várias vezes quando os dados não forem consultados nesse meio tempo.)

Ou talvez você tenha apenas uma carga de trabalho com muita gravação. Ou as leituras geralmente são verificações completas, nas quais as estatísticas não são extremamente importantes.

Aaron Bertrand
fonte