Puoi ottenere questo (e altro) dalle visualizzazioni di gestione dinamica (DMV). Per ottenere statistiche per una particolare procedura memorizzata, provare la seguente query.
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);
Per esaminare le procedure eseguite più frequentemente:
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);
I valori riportati sono cumulativi dall'ultimo riavvio. Se si desidera misurare su un periodo fisso, utilizzare il comando seguente per ripristinare le statistiche di attesa.
DBCC SQLPERF("sys.dm_os_wait_stats",CLEAR);
Se si desidera misurare intervalli temporali fissi nell'arco della giornata, è possibile alimentare l'output della query in una tabella tramite un processo agente e a) calcolare i valori tra due esecuzioni oppure b) emettere le statistiche di attesa reimpostate come ultimo passaggio nel processo agente .
In alternativa, acquisire una traccia del profiler ed eseguirla attraverso Clear Trace .