检查SQL Server 2005中表的使用历史记录

时间:2009-02-16 10:32:56

标签: sql-server-2005

有没有办法检查表访问的统计信息,通过更新,删除或选择?我试图找到过时的未使用的表进行数据库清理。

由于

5 个答案:

答案 0 :(得分:1)

是 - 您可以创建跟踪,MSDN - Data Access Tracing in SQL Server 2005

或者,如果你知道访问它们的是什么(例如通过存储过程),你可以在其中留下跟踪信息(向表中添加行),然后你就可以看到实际运行的是什么。这不是万无一失的 - 你证明是负面的,因为你会发现偶尔点击更难。

我们使用的一种方法是重命名表格,例如到'zzz_OldName'并将它们留在那里一段时间,定期修剪架构的那个区域。

答案 1 :(得分:0)

据我所知,在Sql Server中没有构建此类数据的统计信息。虽然您可以使用Sql Profiler来获取一段时间内的使用情况数据。

答案 2 :(得分:0)

您可以检查您的DMV(Dynamic Management Views)。如果你的表都有一个主键,那么就有一个主键索引,如果永远不会读取该索引,那么你的表根本就不会被使用。

但请注意:这些是动态管理视图 - 每次SQL Server启动时它们都会重置为0。在删除表之前,您可能希望查看SQL Server 2005的SQL Server 2008 Performance DAta CollectorSQL DMV Stats项目以在较长时间内捕获DMV数据: - )

马克

答案 3 :(得分:0)

还可以在表上放置一个触发器,将TableName + GetDate()存储在“WasFoundToBeUsedAfterAll”表中

你可能想要UpSert已存在的任何行,也许只有现有的Date已经24小时或更长时间,而不是插入多行 - 这只会成为一个维护问题!

答案 4 :(得分:0)

-- shows table accesses since last MSSQL reboot via index stats.
-- NULL columns imply table wasnt accessed since the last restart.
SELECT 
  t.name AS 'Table', 
  Count(i.user_seeks) as 'Indexes',
  SUM(i.user_seeks + i.user_scans + i.user_lookups) 
    AS 'Total accesses',
  SUM(i.user_seeks) AS 'Seeks',
  SUM(i.user_scans) AS 'Scans',
  SUM(i.user_lookups) AS 'Lookups',
  SUM(i.user_updates) AS 'Updates'
FROM 
  sys.dm_db_index_usage_stats i RIGHT OUTER JOIN 
  sys.tables t ON (t.object_id = i.object_id)
GROUP BY 
  i.object_id, 
  t.name
ORDER BY [Total accesses] DESC