SQL Server

dmv 에서 고부하 쿼리 찾기

DBASeoul 2023. 1. 6. 16:57

쿼리 실행시마다 실행 계획, 쿼리 등이 db 서버 메모리에 저장된다.

 

재기동 전까지 데이터는 누적되어 아래 쿼리로 고부하 쿼리가 어떤쿼리 인지 찾을수 있다.

 

cpu 스파이크를 찾는건 불가능 하나, 단순하게 비용이 높은 쿼리는 조회 가능하다.

SELECT object_name (b. objectid),R .cpu_time,
S.host_name ,S. login_name, C. query_text,P .query_plan

             FROM sys .dm_exec_requests as r
             JOIN sys .dm_exec_sessions AS S ON S.session_id= R .session_id
CROSS APPLY sys. dm_exec_sql_text( r.sql_handle ) AS B
CROSS APPLY SYS. DM_EXEC_QUERY_PLAN(r .plan_handle) AS P
OUTER APPLY
(
             SELECT top 1
             case when sql_handle IS NULL then ''
             else ( substring(B .text,( qs.statement_start_offset +2)/ 2,(
                         case when qs .statement_end_offset= -1then len(convert (nvarchar( MAX),B .text))* 2 else qs.statement_end_offset +10 end
                         - qs.statement_start_offset )/2))
             end as query_text
                         FROM sys .dm_exec_query_stats AS qs WHERE qs.query_hash= R. query_hash
) AS C
WHERE R.session_id> 50and R.database_id> 1
ORDER BY R .cpu_time DESC