首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Microsoft SQL Server2005中标识未使用的对象

在Microsoft SQL Server2005中标识未使用的对象
EN

Stack Overflow用户
提问于 2008-11-14 17:25:32
回答 1查看 10.4K关注 0票数 17

找出一个对象是否被其他对象引用是一项微不足道的任务。我想要做的是确定它是否是实际使用的

我的解决方案最初涉及包含数据库中对象列表的表和每小时作业的组合。

这项工作做了两件事。首先,它查找自上次运行以来添加到数据库中的新对象。其次,它研究了sql的对象缓存。如果表中的某个对象在缓存中列出,则在表中将其标记为最近被“看到”在使用中。

在六个月或其他时间结束时,检查表格的内容。表中列出的自我开始监视以来未被引用的任何内容可能都可以安全地备份和删除。

当然,有可能只使用对象,比方说,一年一次或其他什么,但它似乎在大多数情况下是有效的。

然而,与之共事是一种痛苦。

我正在使用的数据库大约有六个,其中大多数都有大量的遗留表,这些表在最初的创建者转移到其他公司后仍然存在很长一段时间。

我正在寻找一种相当可靠的方法来跟踪对象(表、视图、存储过程或函数)何时被调用。

对于那些正在监控这类事情的人,你会使用什么方法/代码,你会推荐它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-11-15 12:17:46

在SQL Server2005中,您可以使用动态管理视图sys.dm_db_index_usage_stats。它的名称是"index“,但这有点误导--每个表都有一个条目,即使它没有任何索引。下面是来自SQL Magazine的一个有用的查询:

代码语言:javascript
复制
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重新启动时重置。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/290773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档