代码之家  ›  专栏  ›  技术社区  ›  Kevin Fairchild

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

  •  17
  • Kevin Fairchild  · 技术社区  · 17 年前

    确定一个对象是否被其他对象引用是一项简单的任务。我想做的是确定它是否 实际使用 .

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

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

    不过,工作起来有点痛苦。

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

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

    1 回复  |  直到 17 年前
        1
  •  24
  •   Mitch Wheat    17 年前

    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