Dicas

Encontrar as estatísticas que estão desatualizadas no SQL Server.

Encontrar as estatísticas que estão desatualizadas no SQL Server.

Como encontrar as estatísticas que estão desatualizadas no SQL Server.

Problema: Preciso descobrir quais são os objetos que estão com as estatísticas desatualizadas no banco de dados nas últimas 24 horas e se possível objetos que sofreram muitas alterações.

Solução: Para descobrir quais objetos estão com as estatísticas desatualizadas no banco de dados, você pode buscar essa informação na sys.sysindexes e sys.tables. A princípio a minha recomendação é que você mantenha a atualização das estatísticas automática no banco de dados habilitado. Para saber se está bloqueado ou não, basta clicar com o botão direito no banco de dados e selecione propriedades na aba options você encontrará essa informação como está na imagem abaixo:

Auto Statistics True

Agora vamos ao que interessa, afinal quais são as estatísticas que estão desatualizadas na minha base de dados? Execute o script abaixo:

DECLARE @horas int
DECLARE @linhas_alteradas int
DECLARE @comando_update nvarchar(300);

SET @horas=24
SET @linhas_alteradas=1000

--Update all the outdated statistics
DECLARE cursor_estatisticas CURSOR FOR
SELECT 'UPDATE STATISTICS '+OBJECT_NAME(id)+' '+name
FROM sys.sysindexes
WHERE STATS_DATE(id, indid)<=DATEADD(HOUR,-@horas,GETDATE()) 
AND rowmodctr>=@linhas_alteradas 
AND id IN (SELECT object_id FROM sys.tables)
 
OPEN cursor_estatisticas;
FETCH NEXT FROM cursor_estatisticas INTO @comando_update;
 
 WHILE (@@FETCH_STATUS <> -1)
 BEGIN
 /*Descomente o comando abaixo para executar */
 --EXECUTE (@comando_update);
 PRINT @comando_update;
 
 FETCH NEXT FROM cursor_estatisticas INTO @comando_update;
 END;
 
CLOSE cursor_estatisticas;
DEALLOCATE cursor_estatisticas;
GO

Como vocês podem ver foi criado um cursor que verifica quais são as estatísticas que estão desatualizadas utilizando dois filtros quantidade de linhas alteradas no parâmetro @linhas_alteradas e últimas horas @horas. Neste caso em específico eu listei todas as estatísticas que estão desatualizadas nas últimas 24 horas e em tabelas que sofreram mais de 1000 atualizações. Fique a vontade para alterar esses filtros.
Verificar isso base por base pode ser cansativo não é mesmo?

O que acha de verificar todas as estatísticas desatualizadas em todos os bancos de dados?

Veja no script a seguir:

DECLARE @command varchar(4000) 
SELECT @command = '
DECLARE @horas int
DECLARE @linhas_alteradas int
DECLARE @comando_update nvarchar(400);

SET @horas=24
SET @linhas_alteradas=1000
-- Descomentar para filtrar as bases do sistema 
--IF ''?'' NOT IN(''master'', ''model'', ''msdb'', ''tempdb'')

USE ? SELECT ''USE ?' + ' UPDATE STATISTICS '' + SCHEMA_NAME() + ''.'' + +OBJECT_NAME(id)+'' ''+name
FROM sys.sysindexes
WHERE STATS_DATE(id, indid)<=DATEADD(HOUR,-@horas,GETDATE()) 
AND rowmodctr>=@linhas_alteradas 
AND id IN (SELECT object_id FROM sys.tables)'
--PRINT @command
EXEC sp_MSforeachdb @command

Eu tirei o cursor e utilizei o select usando a procedure sp_MSforeachdb para executar em todos os bancos de dados.

Encontrar as estatísticas que estão desatualizadas no SQL Server.
Wesley Mota

Profissional graduado em Banco de Dados e Sistemas de Informação com mais de 7 anos de experiência em empresas de software. Certificado MCSA Microsoft SQL Server possui intensa vivência em administração de banco de dados, Tunning, Performance SQL Server, levantamento de melhorias e monitoramento de banco de dados e servidores SQL Server. Consultoria SQL Server em diversos clientes no Brasil e ao redor do mundo. Escritor no blog dbasqlserverbr.com.br/blog. Onde compartilha conhecimento, experiências e dicas de performance para DBAs SQL Server. Conhecimentos em Oracle e ambientes de alta disponibilidade. Desenvolvimento de softwares web e mobile.Gerenciamento de equipe e projetos.

Share
Published by
Wesley Mota

Recent Posts

Dicas de como a função UPPER() no SQL Server pode degradar a performance

Saiba como a função UPPER() no SQL Server pode degradar a performance das suas consultas…

6 anos ago

Como diminuir o RESOURCE_SEMAPHORE_QUERY_COMPILE

Saiba agora mesmo como você pode diminuir o RESOURCE_SEMAPHORE_QUERY_COMPILE no SQL Server. Recentemente eu trabalhei em…

8 anos ago

Funções de Data no SQL Server: Conheça a DATEADD ()

Nós DBA' e desenvolvedores quase sempre temos que trabalhar com datas quando se trata de…

8 anos ago

3 Maneiras Para Proteger a Conta SA no SQL Server

Quais são as diferentes maneiras de proteger o login Senha do Administrador (SA)? Todos estão…

8 anos ago

Alterar a Senha de SA do SQL Server: Como Fazer?

Com os direitos que o login sa tem por padrão no SQL Server, é obrigatório…

8 anos ago

Segurança Para DBAs e Administradores no SQL SERVER

Como um DBA, você tem a responsabilidade de garantir a segurança do aplicativo e dos…

8 anos ago