检查SQL Server 2005中表上的使用历史记录
是 - 你可以创建一个跟踪,MSDN - Data Access Tracing in SQL Server 2005。另外,如果你知道什么是访问它们(例如通过存储过程),你可以在它们中留下跟踪信息(向表中添加行),然后你就可以看到实际运行的是什么。这不太安全 - 你被证明是一个负面因素,因为你会发现难以赶上偶尔的命中。
我们使用的一种方法是只重命名表,到'zzz_OldName'并且让它们留在那里一段时间,定期修剪该模式的那个区域。
据我所知,在Sql Server中这样的数据没有统计数据。尽管您可以使用Sql Profiler在一段时间内获取使用数据。
如果您的数据通过SProcs存储到表中,我不确定Profiler会帮助哪些实际表受到影响 - 但我可能是错误的! – Kristen 2009-02-16 11:12:40
它不会但至少会显示哪些SP被使用,哪些不是,这将帮助您找到未使用的表。 – 2009-02-16 11:14:19
您可以检查您的DMV(Dynamic Management Views)。如果你的表都有一个主键,那么就有一个主键索引,并且如果该索引永远不被读取,你的表根本就没有被使用。
但请注意,这些是动态管理视图 - 每次SQL Server启动时它们都会重置为0。你可能要考虑无论是SQL Server 2008中Performance DAta Collector或SQL DMV Stats项目为SQL Server 2005删除表:-)
马克
也可以把之前拍摄过的长时间DMV数据在Table上触发以在“WasFoundToBeUsedAfterAll”表中存储TableName + GetDate()
您可能希望UpSert已存在的任何行,也许只有当现有的Date已经24小时或更长时间时,才可以插入多个行 - 这只会成为维护问题!
-- 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
+1'zzz_OldName''Scream Test'。我们在表名后加上日期,以便说一个月后,我们知道现在我们可以丢弃哪些表。同样,对于任何“以防万一”表,我们将TEMP_MyTableName_YYYYMMDD命名为TEMP_MyTableName_YYYYMMDD - 所有按alpha分组的TEMP * – Kristen 2009-02-16 11:11:36