我们的一个数据库拥有超过3400个存储过程和400个函数。该系统自2009年以来就已存在,并且有许多不再使用的过程/功能。我被赋予了找到那些未使用的触发器的任务,以便它们可以存档。
一个计划是使用表格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)
有没有更好的方法来检测这些未使用的存储过程?