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.
The following two tabs change content below.

Wesley Mota

DBA SQL Server
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.

Latest posts by Wesley Mota (see all)

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

Utforska Topplista: Casinon utan licens med flest Megaways-slots

Utforska Topplista: Casinon utan licens med flest Megaways-slotsDet är ingen hemlighet att Megaways-slots har blivit…

4 dias ago

Comment obtenir de laide sous Windows 10 ?

ContentCultivo del pimiento¿Cómo beneficia la salud el pimentón ahumado?Enfermedades causadas por bacterias y virusPimentón de…

6 dias ago

NUEVOS JUEGOS ¡Juega Gratis Online!

Content¿Cuáles son los mejores Nuevos Juegos gratuitos online?Qué es Poki? Ofrecemos acceso instantáneo a todos…

2 semanas ago

Il Camilleri-linguaggio

ContentErzählen Sie Ihre Geschichte: von Kampanien bis ins Herz Brasiliens, die Geschichte der Familie LandriEl…

2 semanas ago

Apartamento com 1 quarto na Avenida Beira Mar, 001, Boa Viagem, Recife PE ID: 26822915

ContentPrefeitura anuncia novo polo no Parque Eduardo Campos, no Pina, e espalha shows pela cidadeMarilia…

2 semanas ago

Tübingen entdecken Universitätsstadt Tübingen

ContentStadtrundgänge Die Universitätsstadt Tübingen sucht seeger tübingen juwelier regelmäßig Verwaltungskräfte in verschiedenen Organisationseinheiten. Die Universitätsstadt…

2 semanas ago