2

私たちのデータベースの 1 つには、3400 を超えるストアド プロシージャと 400 の関数が含まれています。システムは 2009 年より前から存在しており、使用されなくなった多くのプロシージャ/関数があります。未使用のプロシージャを見つけてアーカイブできるようにするというタスクが与えられました。

1つの計画は、テーブルを使用することでしたsys.dm_exec_procedure_stats

1 日に 1 回テーブルをチェックし、1 か月または 1 四半期にわたって集計するジョブを設定できます。

これには 2 つの問題があります。関数をキャッチしないことと、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