我正在存档一个没有文档的旧系统中的数据。幸运的我..。
我想知道这些表是什么时候创建的,最后一次访问等等。我能相信这个查询会给出正确的答案吗?还是首先需要检查一些参数?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
发布于 2014-08-12 08:50:02
不是的。
sys.dm_db_index_usage_stat
视图最多只反映上次数据库启动(最后一个实例启动,或上次数据库联机时)以来的数据。此外,在记忆压力下,条目可以清除。它会给出准确的正数(如果一个表有非零的统计量,那么它就被使用了),但是它可能会给出假的负数(统计数据中的0用法可能不反映实际使用情况)。还有很多系统每周只使用一次特定的表,每月一次,甚至每年一次。
发布于 2014-08-12 10:06:14
这是你不能盲目依赖车管所sys.dm_index_usage_stats的另一个原因。在索引仅用于与索引列关联的统计信息后,sys.dm_db_index_usage_stats不会更新。保罗在他的链接中展示了这一点。
你也会喜欢阅读
此外,我不认为通过使用DMV,有一个完美的方法,以确定何时是最后使用表。我相信使用Profiler跟踪或扩展事件跟踪将是更好的选择。虽然分析器可以导致负载,但是服务器端跟踪是一个很好的选择。
https://dba.stackexchange.com/questions/73745
复制相似问题