As informações em sys.dm_db_index_usage_stats são confiáveis

8

Estou arquivando dados de um sistema antigo que não possui documentação. Sorte minha...

Gostaria de descobrir quando as tabelas foram criadas, acessadas pela última vez etc. Posso confiar que esta consulta me dará a resposta correta ou há alguns parâmetros que primeiro preciso verificar? SQL Server 2008 R2:

 SELECT t.Name AS Tabelname, p.rows AS NoOfRows, MAX(us.last_user_lookup) AS LastUsed, t.create_date AS CreatedDate
FROM sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
LEFT JOIN --A lot of the tables did not have any records in this table
    sys.dm_db_index_usage_stats as us ON t.OBJECT_ID = us.OBJECT_ID
GROUP BY t.Name, p.rows, create_date
ORDER BY MAX(us.last_user_lookup) DESC
Colin 't Hart
fonte

Respostas:

15

Não.

A sys.dm_db_index_usage_statexibição reflete apenas, na melhor das hipóteses, dados desde a última inicialização do banco de dados (inicialização da última instância ou última vez que o banco de dados foi colocado online). Além disso, as entradas podem desaparecer sob pressão da memória. Ele fornecerá positivos precisos (se uma tabela tiver estatísticas diferentes de zero, será usada)), mas poderá fornecer falsos negativos (0 uso nas estatísticas pode não refletir o uso real). Além disso, existem muitos sistemas que usam determinadas tabelas apenas uma vez por semana, uma vez por mês ou mesmo uma vez por ano.

Remus Rusanu
fonte
3

Aqui está mais um motivo pelo qual você não pode confiar cegamente no DMV sys.dm_index_usage_stats. sys.dm_db_index_usage_stats não é atualizado depois que um índice é usado apenas para as estatísticas associadas às colunas indexadas. Paulo mostrou isso em seu link.

O que o sys.dm_index_usage_stats DMV não informa

Você também gostaria de ler

Este artigo sobre estatísticas de uso do índice DMV

Além disso, na IMO, eu não acho que usando o DMV, existe uma maneira PERFEITA de descobrir quando a última tabela foi usada. Eu acredito que usando o rastreamento do Profiler ou o rastreamento de eventos estendidos seria a opção mais melhor. Embora o criador de perfil possa causar carga, o rastreamento do lado do servidor é uma boa opção.

Shanky
fonte