2

我们的一个数据库有超过 3400 个存储过程和 400 个函数。该系统自 2009 年之前就已经存在,并且有许多不再使用的过程/功能。我的任务是找到那些未使用的 proc,以便将它们存档。

一个计划是使用这张桌子sys.dm_exec_procedure_stats

我可以设置一个工作来每天检查一次表格,然后在一个月或一个季度的过程中进行总结。

这有两个问题:它不会捕获函数,也不会捕获带有 NOCOMPILE 的存储过程。所以我决定改用扩展事件。
我没有找到完全实现这一点的代码,所以我在这里添加它以防它可以节省其他人一些时间。

CREATE EVENT SESSION [CaptureProcNames]
ON SERVER 
    ADD EVENT sqlserver.sp_statement_starting
    (
     SET collect_object_name=(1),
             collect_statement=(0)
     WHERE (
            ([object_type]=(8272) OR [object_type]=(20038)) 
            AND [sqlserver].[database_name]=N'MyDatabase' 
            AND [sqlserver].[is_system]=(0))
    ) 
    ADD TARGET package0.event_file
    (SET filename=N'C:\Program Files\Microsoft SQL Server\MSSQL11.KAIGSTAGING\MSSQL\Log\CaptureProcNames.xel',max_file_size=(250),max_rollover_files=(3))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)

有没有更好的方法来检测这些未使用的存储过程?

4

0 回答 0