Neste artigo, vamos explorar o conceito de estatísticas no SQL Server e aprender como atualizá-las usando o procedimento armazenado embutido sp_updatestats.
Compreendendo Estatísticas no SQL Server
Estatísticas no SQL Server são objetos de banco de dados que contêm a distribuição estatística detalhada dos valores das colunas para tabelas ou exibições indexadas. O otimizador de consultas usa essas informações para estimar o número de linhas que serão retornadas de uma consulta. Estatísticas atualizadas ajudam o otimizador de consultas a gerar planos de execução mais otimizados, resultando em um melhor desempenho da consulta.
Estatísticas podem ficar desatualizadas quando operações de modificação são realizadas em tabelas. Nesses casos, o otimizador de consultas pode não ser capaz de gerar o melhor plano de execução, levando a problemas de desempenho. Portanto, é recomendado manter as estatísticas atualizadas.
Atualizando Estatísticas com sp_updatestats
O procedimento armazenado sp_updatestats atualiza as estatísticas para todas as tabelas definidas pelo usuário e internas no banco de dados atual, garantindo que as estatísticas estejam atualizadas. A sintaxe para usar este procedimento é a seguinte:
sp_updatestats [ [ @resample = ] 'resample' ]
Para atualizar as estatísticas de todas as tabelas no banco de dados AdventureWorks, você pode executar a seguinte consulta:
USE AdventureWorks;
GO
EXEC sp_updatestats;
A mensagem de saída pode indicar que uma atualização não é necessária para algumas estatísticas. Isso ocorre porque, mesmo que apenas uma linha tenha sido modificada em uma tabela desde a última atualização de estatísticas, as estatísticas ainda serão atualizadas. Caso contrário, as estatísticas não serão atualizadas.
Monitorando Estatísticas
A exibição de gerenciamento dinâmico sys.dm_db_stats_properties (DMV) pode ser usada para monitorar os detalhes das estatísticas de uma tabela específica ou exibição indexada. A consulta a seguir demonstra como recuperar os detalhes das estatísticas para a tabela Production.Product:
SELECT sp.stats_id, name, filter_definition, last_updated, rows, rows_sampled, steps, unfiltered_rows, modification_counter
FROM sys.stats AS stat
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp
WHERE stat.object_id = OBJECT_ID('Production.Product');
Ao atualizar uma única linha na tabela Production.Product e executar novamente a consulta de monitoramento de estatísticas, você pode observar alterações na coluna modification_counter, que indica o número de modificações desde a última atualização de estatísticas.
Usando a Opção RESAMPLE
O procedimento sp_updatestats pode ser usado com a opção RESAMPLE para atualizar estatísticas com base na taxa de amostragem mais recente. Por padrão, as estatísticas são atualizadas com a taxa de amostragem padrão determinada pelo SQL Server. Para usar a opção RESAMPLE, você pode executar a seguinte consulta:
EXEC sp_updatestats @resample = 'resample';
É importante observar que, se a última atualização de estatísticas escaneou a tabela inteira, usar o procedimento sp_updatestats com a opção RESAMPLE também escaneará todas as linhas na tabela. Isso pode consumir muitos recursos para tabelas grandes com modificações mínimas.
Conclusão
Neste artigo, discutimos a importância de estatísticas atualizadas para o desempenho de consultas no SQL Server. Aprendemos como atualizar estatísticas usando o procedimento armazenado sp_updatestats e exploramos o uso da opção RESAMPLE. Manter as estatísticas atualizadas é uma prática recomendada para garantir um desempenho de consulta ideal no SQL Server.