SQL 2005 이상에서 SP의 성능을 확인할 수 있는 모니터링 쿼리를 작성해 보았습니다.
이것은 SP가 성능 문제를 발생할 경우 어떤 SP인지 찾고 싶을 때 유용하게 사용할 수 있습니다.

-- 캐시 비우기
-- DBCC FREEPROCCACHE

-- 쿼리 통계 중 SP 관련 데이터 확인
-- SQL 2005에서는 SP 단위의 통계를 수집하는 DMV가 없기 때문에 statement의 정보를 GROUP BY하여 확인해야 함
SELECT QS.*
,         DB_NAME(ST.dbid) as dbName
,         OBJECT_NAME(ST.objectid, ST.dbid) as objectName
--,       ST.*
FROM (
          SELECT TOP 5 sql_handle
          ,         MAX(execution_count) as execution_count
          ,         SUM(last_logical_reads) as last_logical_reads
          ,         SUM(max_logical_reads) as max_logical_reads
          ,         SUM(total_logical_reads) as total_logical_reads
          FROM sys.dm_exec_query_stats
          GROUP BY sql_handle
          ORDER BY SUM(last_logical_reads) DESC
) AS QS
          CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE ST.objectid IS NOT NULL
ORDER BY QS.last_logical_reads DESC



-- SQL 2008에서 새로 추가된 DMV를 이용하여 확인
SELECT TOP
          DB_NAME(database_id) as dbName
,         OBJECT_NAME(object_id, database_id) as objectName
,         *
FROM sys.dm_exec_procedure_stats
ORDER BY last_logical_reads DESC
 

-- 확인된 쿼리의 text plan은 다음의 2 DMV에서 확인
sys.dm_exec_query_plan ( plan_handle )
sys.dm_exec_sql_text(sql_handle | plan_handle)
 

하만철 / Ha Man-cheol

AND