找出一个对象是否被其他对象引用是一项微不足道的任务。我想要做的是确定它是否是实际使用的。
我的解决方案最初涉及包含数据库中对象列表的表和每小时作业的组合。
这项工作做了两件事。首先,它查找自上次运行以来添加到数据库中的新对象。其次,它研究了sql的对象缓存。如果表中的某个对象在缓存中列出,则在表中将其标记为最近被“看到”在使用中。
在六个月或其他时间结束时,检查表格的内容。表中列出的自我开始监视以来未被引用的任何内容可能都可以安全地备份和删除。
当然,有可能只使用对象,比方说,一年一次或其他什么,但它似乎在大多数情况下是有效的。
然而,与之共事是一种痛苦。
我正在使用的数据库大约有六个,其中大多数都有大量的遗留表,这些表在最初的创建者转移到其他公司后仍然存在很长一段时间。
我正在寻找一种相当可靠的方法来跟踪对象(表、视图、存储过程或函数)何时被调用。
对于那些正在监控这类事情的人,你会使用什么方法/代码,你会推荐它吗?
发布于 2008-11-15 12:17:46
在SQL Server2005中,您可以使用动态管理视图sys.dm_db_index_usage_stats。它的名称是"index“,但这有点误导--每个表都有一个条目,即使它没有任何索引。下面是来自SQL Magazine的一个有用的查询:
SELECT
t.name AS 'Table',
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'
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
以下是原文:
http://www.sqlmag.com/Article/ArticleID/53878/sql_server_53878.html
请记住,这些使用情况统计信息会在SQL Server重新启动时重置。
https://stackoverflow.com/questions/290773
复制相似问题