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

Free Blackjack No Download: Appreciate Blackjack Anytime, Anywhere

Blackjack, additionally known as twenty-one, is just one of one of the most popular gambling…

1 mês ago

The Ultimate Guide to Gry Online Ruletka

If you are a fan of online gambling, then you must have come across gry…

1 mês ago

Discover the Adventures of Free Spins at Online Casino Sites

On the internet online casinos have transformed the betting industry, enabling players to vegas.hu online…

8 meses ago

Best Free Spins No Deposit

Casinos online offer free spins to draw new customers. These bonuses are usually very profitable,…

8 meses ago

Ideal Online Port Gambling Enterprises: An Overview to Locating the Perfect Pc Gaming Experience

In recent times, online casino sites have actually obtained enormous appeal among gamers, providing a…

8 meses ago

Best Online Casinos That Accept Bitcoin Down Payments

Bitcoin, the most preferred cryptocurrency worldwide, has reinvented lots of industries, including the on baixar…

8 meses ago