web-dev-qa-db-ja.com

ストアドプロシージャの実行を追跡するための拡張イベントの適切なイベントは何ですか?

私の目標は、拡張イベントを使用して単一のストアドプロシージャの実行を追跡することです

イベント選択リストでは、以下を見つけることができます。

sql_statement_completed
sql_batch_completed
sp_statement_completed
rpc_completed

私はどちらを選ぶべきですか?明確な実行回数のみが必要です

3
Aleksey Vitsko

ストアドプロシージャ名でフィルタリングされたmodule_startイベントと、object_nameフィールドに基づいてヒストグラムターゲットバケットを含めます。これにより、ストアドプロシージャが直接または間接的に呼び出される(つまり、他のストアドプロシージャやトリガーと呼ばれる)かどうかに関係なく、ストアドプロシージャが実行されるたびに実行カウントが収集および集計されます。

CREATE EVENT SESSION [module_start_execution_summary] ON SERVER 
ADD EVENT sqlserver.module_start(
    WHERE ([object_name]=N'YourStoredProcedure'))
ADD TARGET package0.histogram(SET filtering_event_name=N'sqlserver.module_start',source=N'object_name',source_type=(0))
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=ON);

同じストアドプロシージャ名が複数のデータベースまたはスキーマに存在する場合、このメソッドでは異なるプロシージャが1つとしてカウントされることに注意してください。データベースの追加フィルターを使用して、カウントを目的のデータベースのみに制限できます。

8
Dan Guzman