¿Es confiable la información en sys.dm_db_index_usage_stats

8

Estoy archivando datos de un sistema antiguo que no tiene documentación. Suerte la mía...

Me gustaría saber cuándo se crearon las tablas, cuándo se accedió por última vez, etc. ¿Puedo confiar en que esta consulta me dará la respuesta correcta o hay algunos parámetros que primero necesito 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
fuente

Respuestas:

15

No.

La sys.dm_db_index_usage_statvista refleja solo, en el mejor de los casos, datos desde el último inicio de la base de datos (inicio de la última instancia o la última vez que se puso en línea la base de datos). Además, las entradas pueden borrarse bajo presión de memoria. Dará positivos precisos (si una tabla tiene estadísticas distintas de cero, entonces se usa)) pero puede dar falsos negativos (el uso de 0 en las estadísticas puede no reflejar el uso real). También hay muchos sistemas que usan ciertas tablas solo una vez por semana, una vez al mes o incluso una vez al año.

Remus Rusanu
fuente
3

Aquí hay una razón más por la que no puede confiar ciegamente en DMV sys.dm_index_usage_stats. sys.dm_db_index_usage_stats no se actualiza después de que se usa un índice solo para las estadísticas asociadas con las columnas indexadas. Paul mostró esto en su enlace.

Lo que sys.dm_index_usage_stats DMV no le dice

También te gustaría leer

Este artículo sobre estadísticas de uso del índice DMV

Además, no creo que al usar DMV haya una manera PERFECTA de saber cuándo se usó la tabla por última vez. Creo que usar Profiler trace o Extended event trace sería una mejor opción. Aunque el generador de perfiles puede causar carga, el rastreo del lado del servidor es una buena opción.

Shanky
fuente