반응형

[MS SQL] CPU를 많이 차지하는 쿼리 조회

DBA - MS SQL 2011/04/22 17:37 posted by 춤추는하현

[활용]

1. 사용중인 서버의 CPU 높을 경우 문제가 되는 쿼리 추출

 

[버젼]

MS SQL Server 2005, MS SQL Server 2008

 

[스크립트]

각 팩터들 중 실제 시스템 영향에 많은 영향을 주는 것은

총 사용된 CPU 타임, 실행 횟수, 최종 실행 시간

위에 세가지 칼럼 정보를 통해 현재 CPU 많이 잡고 있는 쿼리를 찾아 내야 한다.

 

Average CPU used - 평균 CPU 사용량

Total CPU used - 사용된 CPU 타임

Execution count - 해당 plan 실행된 횟수

Individual Query - 실제 실행된 plan

Parent Query - 해당 실행 plan 포함된 쿼리

DatabaseName - 해당 DB

                         임시 준비된 SQL 문의 경우 NULL입니다

creation_time - 해당 쿼리의 plan 생성 일자

last_execution_time - 최종 실행 시간

 

SELECT TOP 20 

 [Average CPU used] = total_worker_time / qs.execution_count

,[Total CPU used] = total_worker_time

,[Last CPU used] = last_worker_time

,[MAX CPU used] = max_worker_time

,[Execution count] = qs.execution_count

,[Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2, 

         (CASE WHEN qs.statement_end_offset = -1 

            THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 

          ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)

,[Parent Query] = qt.text

,DatabaseName = DB_NAME(qt.dbid)

,qs.creation_time

,qs.last_execution_time

FROM sys.dm_exec_query_stats qs

CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt

ORDER BY [Average CPU used] DESC; 

반응형

+ Recent posts