sys.dm_db_index_usage_stats中的信息是否可靠


8

我正在从没有文档的旧系统中归档数据。幸运的我...

我想找出表的创建时间,上次访问时间等。我是否可以相信此查询将为我提供正确的答案,还是我首先需要检查一些参数?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

Answers:


15

没有。

sys.dm_db_index_usage_stat视图充其量仅反映自上次数据库启动(上次实例启动或数据库上次上线)以来的数据。此外,这些条目可能会在内存压力下清除。它将给出准确的肯定值(如果表的统计信息为非零,则使用该表),但可能给出错误的否定信息(统计信息中的0使用率可能无法反映实际使用率)。也有许多系统每周仅一次,每月一次甚至每年一次使用某些表。


3

这是您不能盲目依赖DMV sys.dm_index_usage_stats的另一个原因。仅将索引用于与索引列关联的统计信息后,不会更新sys.dm_db_index_usage_stats。保罗在他的链接中显示了这一点。

sys.dm_index_usage_stats DMV不告诉您什么

您还想阅读

本文有关索引使用情况统计DMV

而且IMO,我不认为通过使用DMV可以找到表上一次使用的正确方法。我相信使用Profiler跟踪或Extended事件跟踪将是更好的选择。尽管事件探查器会导致负载,但是服务器端跟踪是一个不错的选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.