有没有办法检查表访问的统计信息,通过更新,删除或选择?我试图找到过时的未使用的表进行数据库清理。
由于
答案 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 Collector或SQL 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