답변:
DMV ( Dynamic Management Views )에서이를 얻을 수 있습니다 . 특정 저장 프로 시저에 대한 통계를 얻으려면 다음 쿼리를 시도하십시오.
SELECT
OBJECT_NAME(qt.objectid)
, qs.execution_count AS [Execution Count]
, qs.execution_count / DATEDIFF(Second, qs.creation_time, GETDATE()) AS [Calls/Second]
, qs.total_worker_time / qs.execution_count AS [AvgWorkerTime]
, qs.total_worker_time AS [TotalWorkerTime]
, qs.total_elapsed_time / qs.execution_count AS [AvgElapsedTime]
, qs.max_logical_reads
, qs.max_logical_writes
, qs.total_physical_reads
, DATEDIFF(Minute, qs.creation_time, GETDATE()) AS [Age in Cache]
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY
sys.dm_exec_sql_text(qs.[sql_handle]) AS qt
WHERE
qt.[dbid] = DB_ID()
AND qt.objectid = OBJECT_ID('StoredProcedureName')
OPTION (RECOMPILE);
가장 자주 실행되는 절차를 보려면
SELECT
OBJECT_NAME(qt.objectid)
, qs.execution_count AS [Execution Count]
, qs.execution_count / DATEDIFF(Second, qs.creation_time, GETDATE()) AS [Calls/Second]
, qs.total_worker_time / qs.execution_count AS [AvgWorkerTime]
, qs.total_worker_time AS [TotalWorkerTime]
, qs.total_elapsed_time / qs.execution_count AS [AvgElapsedTime]
, qs.max_logical_reads
, qs.max_logical_writes
, qs.total_physical_reads
, DATEDIFF(Minute, qs.creation_time, GETDATE()) AS [Age in Cache]
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY
sys.dm_exec_sql_text(qs.[sql_handle]) AS qt
WHERE
qt.[dbid] = DB_ID()
ORDER BY
qs.execution_count DESC
OPTION (RECOMPILE);
보고 된 값은 마지막 재시작 이후 누적됩니다. 일정 기간 동안 측정하려면 아래 명령을 사용하여 대기 통계를 재설정하십시오.
DBCC SQLPERF("sys.dm_os_wait_stats",CLEAR);
하루 종일 고정 시간 간격을 측정하려는 경우 에이전트 작업을 통해 쿼리 출력을 테이블에 공급하고 a) 두 실행 사이의 값을 계산하거나 b) 에이전트 작업의 마지막 단계로 재설정 대기 통계를 발행 할 수 있습니다 .
또는 프로파일 러 추적을 캡처하고 Clear Trace를 통해 실행하십시오 .