首页 > 解决方案 > 列出所有对象和相关活动 SQL Server 2008R2

问题描述

有没有办法列出服务器中的所有对象(对于所有数据库)及其活动?

我所说的活动是什么意思:

目标是消除一些未使用的对象或至少识别它们,以便我们可以进一步分析它。如果有更好的方法来做到这一点,请告诉我。

标签: sql-server-2008-r2

解决方案


如果您的代码中没有特定的审核或明确的日志记录说明,您所要求的可能难以实现。

在我看来,这里有一些提示可以帮助您检索所需的信息:

  1. 表/视图您可以依赖记录索引信息的动态管理视图:(sys.dm_db_index_usage_stats更多信息在这里

    SELECT last_user_update, *
    FROM sys.dm_db_index_usage_stats
    WHERE database_id = DB_ID('YourDBName')
    AND OBJECT_ID = OBJECT_ID('[YourDBName].[dbo].[YourTableName]') 
    
  2. 存储过程如果 SP 执行仍然被缓存,你可以查询sys.dm_exec_procedure_stats(更多信息在这里

    select last_execution_time, * 
    from sys.dm_exec_procedure_stats
    WHERE database_id = DB_ID('YourDBName')
    AND OBJECT_ID = OBJECT_ID('[YourDBName].[dbo].[YourSpName]')
    
  3. 函数如果函数执行仍然被缓存,你可以查询sys.dm_exec_query_stats(来自这个很好的答案),更多信息在这里

    SELECT qs.last_execution_time
    FROM sys.dm_exec_query_stats qs
       CROSS APPLY (SELECT 1 AS X
        FROM sys.dm_exec_plan_attributes(qs.plan_handle)
        WHERE  ( attribute = 'objectid' 
                 AND value = OBJECT_ID('[YourDBName].[dbo].[YourFunctionName]') )
                OR ( attribute = 'dbid' 
                     AND value = DB_ID('YourDBName') )
        HAVING COUNT(*) = 2) CA  
    

推荐阅读