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

Posted

技术标签:

【中文标题】识别 Microsoft SQL Server 2005 中未使用的对象【英文标题】:Identifying Unused Objects In Microsoft SQL Server 2005 【发布时间】:2008-11-14 17:25:31 【问题描述】:

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

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

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

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

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

不过,工作有点痛苦。

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

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

对于目前监控这类事情的你们,你们使用什么方法/代码,你们会推荐吗?

【问题讨论】:

【参考方案1】:

使用 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 重新启动时重置。

【讨论】:

如何调整它以查找未使用的视图和存储过程? @FunkySi 不幸的是,你不能。 SQL Server 不会跟踪视图或存储过程的类似数据。

以上是关于识别 Microsoft SQL Server 2005 中未使用的对象的主要内容,如果未能解决你的问题,请参考以下文章

microsoft SQL server,错误2

sql server 2014怎么装的过程中出错

Azure SQL:从 Blob 添加无法识别存储

连接失败: SQLState:'01000' SQL Server 错误: 53 [Microsoft][ODBC SQL Server Driver][DBNETLIB]Connec

批量插入/上载microsoft sql server(csv)

microsoft sql server 怎么删除