Dica – Encontrando Estatísticas de Tabelas e Índices desatualizadas através da função Stats_date() e Visão de Catálogo Sys.Stats.

Dica – Encontrando Estatísticas de Tabelas e Índices desatualizadas através da função Stats_date() e Visão de Catálogo Sys.Stats.


Olá galera, boa tarde.

Seguindo o ritmo dos últimos posts, estou de volta com mais uma dica. Hoje vou apresentar como podemos de forma fácil obter informações sobre Estatísticas de Tabelas e Índices no SQL Server, através da System Function Stats_Date() em conjunto com Visão de Catálogo Sys.Stats.

Alias, este é um dos meus assuntos prediletos relacionados à Performance no SQL Server, algo que pouquíssimos profissionais se preocupam em um momento de migração, manutenção ou até mesmo disponibilidade do ambiente.

E mais uma vez, eu me surpreendi com a quantidade de recursos que o SQL Server nos oferece, estou me referindo à função Stats_Date(), que eu particularmente não conhecia, como também, a visão de catálogo Sys.stats, ambos os recursos introduzidos a partir do SQL Server 2005.

Vou começar destacando a função Stats_Date(), criada especialmente para trabalhar com informações de Tabelas e Índices, mais especificamente no que diz respeito a valores estatísticos.

Em sua finalidade a Stats_Date(), trabalha como se fosse um coletor de dados, utilizando dois parâmetros de entrada:

  • Object_id: Id de identificação da tabela que será feita a coleta de dados estatísticos;
  • Stats_Id ou Index_ID: Id de identificação de estatísticas ou índice que será feita a coleta de dados estatísticos.

Com base nos valores repassados a função Stats_Date(), realiza o seu processo de coleta de dados, tendo como prioridade identificar o conjunto de estatísticas que apresentam a data mais recente. Nesta mesma linha de raciocínio, podemos também destacar a possibilidade deste conjunto de valores serem interpretados como valores atualizados ou desatualizados.

Outro elemento importante neste processo é a visão de catálogo Sys.Stats, recurso que possui a finalidade de apresentar uma linha de dados estatísticos para Tabelas, Visões ou Funções do Tipo Tabela.

Em resumo, o uso combinado da Stats_Date() e Sys.Stats, nos apresenta uma ótima ferramenta no processo de monitoramento, gerenciamento e ciclo de nossos ambientes de bancos de dados.

Muito bem, vamos então apresentar este código que pode nos ajudar em muito, como de costume foi dar nome aos bois, chamando este código de Relação de Estatísticas Desatualizadas. Segue abaixo o código:

— Relação de Estatísticas Desatualizadas —

SELECT name AS Estatística, STATS_DATE(object_id, stats_id) AS ‘Data’

FROM sys.stats

Where STATS_DATE(object_id, stats_id) >= Dateadd(M,-3, GetDate())

Order by Data Desc

 

Realizando uma simples análise, podemos observar que o código é bastante simples, na cláusula Where estamos realizando um filtro com base nos valores de Data, solicitando ao SQL Server retornar os registros referentes aos últimos três meses.

Além disso, como destacado anteriormente passamos dois valores de entrada para a função Stats_Date(), que realiza análise dos valores com base na visão de catálogo Sys.stats. Tanto a coluna object_id e stats_id são pertencentes à visão e seus valores interpretados pela função. Após o processamento deste código, o SQL Server apresentou o seguinte resultado, conforme apresenta a Figura 1:

Figura 1 – Relação de Estatísticas.

 

Legal, agora que já conhecemos este código, acredito que a minha dica se encerra aqui. Fica a vontade para personalizar este recurso e transformá-lo da forma que mais se aproxima da sua necessidade.

Espero que você tenha gostado e que as informações e exemplos possam ser úteis.

Um grande abraço.

Nos encontramos em breve.