设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 识别未使用的存储过程

发布时间:2020-12-24 07:44 所属栏目:116 来源:网络整理
导读:明年,我正在努力清理几个SQL Server环境. 我们有大约10,000个存储过程并且估计它们中只有大约1000个被定期使用,而另外200个左右被用于极少数情况,这意味着我们有很多工作要做. 由于我们有多个可以访问这些数据库和过程的部门和团队,因此我们并不总是调用这些

明年,我正在努力清理几个SQL Server环境.

我们有大约10,000个存储过程并且估计它们中只有大约1000个被定期使用,而另外200个左右被用于极少数情况,这意味着我们有很多工作要做.

由于我们有多个可以访问这些数据库和过程的部门和团队,因此我们并不总是调用这些过程的人,这意味着我们必须确定调用哪些过程.最重要的是,我们希望在几个月内确定这一点,而不是在几天内(这消除了一些可能性).

一种方法是使用SQL Server Profiler并跟踪调用的过程,并将它们与我们所拥有的过程列表进行比较,同时标记是否使用过程.从那时起,我们可以将程序移动到不同的模式,以防部门尖叫.

在这里使用Profiler是最有效的方法吗?和/或你们有没有做过类似的事情,并找到另一种方式/更好的方法来做到这一点?

解决方法

您可以在测试或业务周期中使用 server side trace(与使用Profiler GUI不同,产生更多资源),并仅捕获与SP相关的内容.然后,您可以将其加载到表或Excel中以进行进一步分析.

第二种方法,是使用DMV sys.dm_exec_procedure_stats(限制,如果重新启动sql server,则刷新数据).

您甚至可以安排作业将DMV数据捕获到表中以使其保持不变.

-- Get list of possibly unused SPs (SQL 2008 only)
    SELECT p.name AS 'SP Name'        -- Get list of all SPs in the current database
    FROM sys.procedures AS p
    WHERE p.is_ms_shipped = 0

    EXCEPT

    SELECT p.name AS 'SP Name'        -- Get list of all SPs from the current database 
    FROM sys.procedures AS p          -- that are in the procedure cache
    INNER JOIN sys.dm_exec_procedure_stats AS qs
    ON p.object_id = qs.object_id
    WHERE p.is_ms_shipped = 0;

参考:

> How to find unused Stored Procedures in SQL Server 2005/2008
> Identifying Unused Objects in a Database

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读