加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – TSQL查询查找未使用的存储过程

发布时间:2020-12-12 16:18:14 所属栏目:MsSql教程 来源:网络整理
导读:我正在追踪从未使用过的数据库中的所有存储过程,或者几个月内还没有使用过的数据库. 我想找到一个查询来显示所有未使用的存储过程,以便可以分析这些存储过程以确定它们是否可以被删除. 我熟悉sys.procedures,但不知道如何确定一个程序是否被使用. SELECT *FRO
我正在追踪从未使用过的数据库中的所有存储过程,或者几个月内还没有使用过的数据库.

我想找到一个查询来显示所有未使用的存储过程,以便可以分析这些存储过程以确定它们是否可以被删除.

我熟悉sys.procedures,但不知道如何确定一个程序是否被使用.

SELECT *
FROM sys.procedures;

使用SQL Server 2008 R2.

更新更新更新

使用下面的Aaron Bertrand的查询稍作修改,这是我最终使用的,这是完美的.

SELECT p.*
  FROM sys.procedures AS p
  LEFT JOIN sys.dm_exec_procedure_stats AS s ON s.[object_id] = p.[object_id]
 WHERE s.object_id IS NULL;

谢谢你的hlep.

解决方法

DMV将记录程序的统计信息,但是它们只能像上一次重新启动一样早(通常不会那么远,取决于计划在缓存中的存储时间):
SELECT * FROM sys.dm_exec_procedure_stats AS s
INNER JOIN sys.procedures AS p
ON s.[object_id] = p.[object_id]
ORDER BY p.name;

所以如果你的系统只有很短的时间,这不是一个可靠的措施. @Siva指出的链接对于其他一些想法也是有用的.不幸的是,SQL Server并没有真正跟踪你的整体,所以除非你添加跟踪或日志记录,你被困在你放在DMV的信任…

编辑这是一个好点,我正在解决已经运行的程序.相反,您可能需要:

SELECT sc.name,p.name 
FROM sys.procedures AS p
INNER JOIN sys.schemas AS sc
  ON p.[schema_id] = sc.[schema_id]
LEFT OUTER JOIN sys.dm_exec_procedure_stats AS st
  ON p.[object_id] = st.[object_id]
WHERE st.[object_id] IS NULL
ORDER BY p.name;

或者您可能还希望包括运行的程序,但是在上次运行时可以将它们排序:

SELECT sc.name,p.name 
FROM sys.procedures AS p
INNER JOIN sys.schemas AS sc
  ON p.[schema_id] = sc.[schema_id]
LEFT OUTER JOIN sys.dm_exec_procedure_stats AS st
ON p.[object_id] = st.[object_id]
ORDER BY st.last_execution_time,p.name;

这将首先订购自重新启动以来没有运行的过程,然后再执行最后一次执行的过程,最早的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读