当前位置:  开发笔记 > 前端 > 正文

在Microsoft SQL Server 2005中识别未使用的对象

如何解决《在MicrosoftSQLServer2005中识别未使用的对象》经验,为你挑选了1个好方法。

找出一个对象是否被其他东西引用是一项微不足道的任务.我想做的是确定它是否真正被使用.

我的解决方案最初涉及一个表,它包含数据库中的对象列表和每小时的工作.

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

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

当然,有可能只使用一年一次或其他任何东西,但它似乎在大多数情况下都有用.

但是,与之合作是一种痛苦.

我正在使用大约六个数据库,其中大多数都有大量的遗留表,这些数据库在原始创作者转移到其他公司之后很久.

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

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



1> Brent Ozar..:

使用SQL Server 2005,您可以使用动态管理视图sys.dm_db_index_usage_stats.这个名称是"索引",但这有点误导 - 每个表都有一个条目,即使它没有任何索引.这是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重新启动时会重置这些使用情况统计信息.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有