2009-02-16 122 views

回答

1

是 - 你可以创建一个跟踪,MSDN - Data Access Tracing in SQL Server 2005。另外,如果你知道什么是访问它们(例如通过存储过程),你可以在它们中留下跟踪信息(向表中添加行),然后你就可以看到实际运行的是什么。这不太安全 - 你被证明是一个负面因素,因为你会发现难以赶上偶尔的命中。

我们使用的一种方法是只重命名表,到'zzz_OldName'并且让它们留在那里一段时间,定期修剪该模式的那个区域。

+0

+1'zzz_OldName''Scream Test'。我们在表名后加上日期,以便说一个月后,我们知道现在我们可以丢弃哪些表。同样,对于任何“以防万一”表,我们将TEMP_MyTableName_YYYYMMDD命名为TEMP_MyTableName_YYYYMMDD - 所有按alpha分组的TEMP * – Kristen 2009-02-16 11:11:36

0

据我所知,在Sql Server中这样的数据没有统计数据。尽管您可以使用Sql Profiler在一段时间内获取使用数据。

+0

如果您的数据通过SProcs存储到表中,我不确定Profiler会帮助哪些实际表受到影响 - 但我可能是错误的! – Kristen 2009-02-16 11:12:40

+0

它不会但至少会显示哪些SP被使用,哪些不是,这将帮助您找到未使用的表。 – 2009-02-16 11:14:19

0

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

但请注意,这些是动态管理视图 - 每次SQL Server启动时它们都会重置为0。你可能要考虑无论是SQL Server 2008中Performance DAta CollectorSQL DMV Stats项目为SQL Server 2005删除表:-)

马克

0

也可以把之前拍摄过的长时间DMV数据在Table上触发以在“WasFoundToBeUsedAfterAll”表中存储TableName + GetDate()

您可能希望UpSert已存在的任何行,也许只有当现有的Date已经24小时或更长时间时,才可以插入多个行 - 这只会成为维护问题!

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