2009-12-21 3 views
20

우리는 애플리케이션에서 너무 많은 비효율적 인 저장 프로 시저를 생성했습니다. 우리는 데이터베이스 성능에 심각한 문제가 발생할 때까지는 더 효율적으로 만들기 위해 항상 연기합니다.가장 많이 실행되는 저장 프로 시저?

이제 가장 자주 실행되는 저장 프로 시저에서 하나씩 순서대로 수정하려고합니다.

어떤 저장 프로 시저가 가장 많이 실행되는지 알아내는 가장 좋은 방법은 무엇입니까?

가장 많이 실행되는 저장 프로 시저를 보여줄 수있는 스크립트가 있습니까?

답변

23

사용 :

SELECT TOP 10 
     qt.TEXT AS 'SP Name', 
     SUBSTRING(qt.text, qs.statement_start_offset/2, CASE WHEN (qs.statement_end_offset = -1) THEN LEN(qt.text) ELSE (qs.statement_end_offset - qs.statement_start_offset)/2 END) AS actual_query, 
     qs.execution_count AS 'Execution Count', 
     qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime', 
     qs.total_worker_time AS 'TotalWorkerTime', 
     qs.total_physical_reads AS 'PhysicalReads', 
     qs.creation_time 'CreationTime', 
     qs.execution_count/DATEDIFF(Second, qs.creation_time, GETDATE()) AS 'Calls/Second' 
    FROM sys.dm_exec_query_stats AS qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt 
WHERE qt.dbid = (SELECT dbid 
        FROM sys.sysdatabases 
        WHERE name = '[your database name]') 
ORDER BY qs.total_physical_reads DESC 

참조 : SQL SERVER – 2005 – Find Highest/Most Used Stored Procedure

+0

또한'SUBSTRING 추출 할 수 있습니다 (텍스트/2의 경우 statement_start_offset 때 (statement_end_offset = -1) 다음 LEN (텍스트) 다른 (statement_end_offset-statement_start_offset)/2 엔드)가 SP 내부의 실제 쿼리에 대한' –

+0

@ Remus : Added, thanks! –

+0

는 문자열한다 (qt.text/2, CASE를 qs.statement_start_offset WHEN (qs.statement_end_offset = -1) THEN LEN (qt.text) ELSE (qs.statement_end_offset - qs.statement_start_offset)/2 END) actual_query AS, –

0

일반적인 상황 ..

.. 성능 분석기 를 실행 한 다음 는 등의이 읽기/쓰기 높은 숫자/스캔을 캡처하는 몇 가지 필터를 설정하여 응용 프로그램을 시작

1

빠른 방법은 SQL 프로파일 러를 실행 한 다음 TextData로 추적을 "그룹화"하십시오.

  • 는 ... 열 구성에 을 클릭 추적 등록 이벤트 선택 탭에서
  • 로 이동은 textData에
  • 을 클릭 한 "그룹"영역으로 이동.

SQL Batch Completed와 같은 특정 이벤트 만보고 싶을 수도 있습니다. 내가 기억한다면, 그것은 당신에게 그룹과 필터링을위한 기간과 다른 유용한 통계를 줄 것입니다.

1

또 다른 환상적인 도구는 Microsoft의 성능 대시 보드입니다. link text