Existe um motivo para atualizar as estatísticas manualmente?

19

No SQL Server, as estatísticas são atualizadas automaticamente quando Auto Update Statisticsem True(que é o padrão). Existe um motivo para atualizar as estatísticas manualmente e em que circunstâncias?

jrara
fonte

Respostas:

21

Claro, se seus dados estão mudando com mais frequência do que a taxa de estatísticas automáticas (ou, por exemplo, você está atualizando <20% das linhas com frequência, como status de atualização ou carimbos de data / hora). Ou se sua mesa for grande e não estiver mudando o suficiente para acionar atualizações automáticas de estatísticas. Ou se você tiver filtrado índices ( já que o limite de estatísticas automáticas ainda se baseia na% de alteração em toda a tabela, não na% de alteração do subconjunto de linhas no índice filtrado ).

Aaron Bertrand
fonte
+1 para índices filtrados. Eu acho que esse é o principal motivo, ou em conjuntos de dados MUITO grandes. Eu tenho tabelas que insiro 30 milhões de linhas por mês, mas é uma pequena porcentagem para que as estatísticas não sejam atualizadas normalmente, a menos que eu as inicie manualmente.
JNK
+1 Além disso, você faz isso de forma programada para redefinir os contadores, significa menos chances fora da janela de manutenção.
gbn
7

Mais algumas razões (superficiais):

As estatísticas de atualização automática bloquearão a consulta que acionou a atualização até que as novas estatísticas estejam prontas.

... A menos que você também ative as estatísticas de atualização automática de forma assíncrona. A consulta que acionou a atualização não aguardará as novas estatísticas, mas será executada potencialmente com as estatísticas antigas e incorretas.

Também encontrei alguns problemas estranhos de bloqueio quando um banco de dados com algumas tabelas relativamente grandes (linhas de 44 milhões, 8,5 GB) começava a atualizar as estatísticas. No entanto, desativamos o aplicativo antes que eu pudesse rastrear o que estava acontecendo.

db2
fonte
1
+1 Esse é um ótimo ponto sobre a opção de bloqueio e async.
Aaron Bertrand