운영환경에서 데이터가 증가하면서 혹은 통계업데이트에 의해 실행계획이 변경되어 쿼리가 갑자기 이전보다 확 느려질 수 있다.

 

아래와 같은 방법으로 실행계획을 확인할 수 있다.

 

1) 문제의 쿼리 찾기

--spid 찾기

select hostname, hostprocess, spid 
from master..sysprocesses
where  hostname = '호스트네임'

SELECT client_net_address, session_id
FROM sys.dm_exec_connections
WHERE client_net_address = 'IP'

 

--실행중인 쿼리 확인
SELECT 
  sqltext.TEXT,
  req.status,
  req.command,
  req.cpu_time,
  req.total_elapsed_time,
  req.blocking_session_id,
  req.percent_complete,
  req.plan_handle -- 실행계획 확인할 때 사용
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
where req.session_id = SPID

 

2) 실행계획 확인하기

SELECT *  FROM sys.dm_exec_query_plan (req.plan_handle); 

 

3) 예상 실행계획 삭제

DBCC FREEPROCCACHE (0x06000700A9F6B63640212E7B280000000000000000000000)

 

4) 캐시에 실행계획이 삭제되었는지 확인

SELECT TOP 10 UseCounts, Cacheobjtype, Objtype, TEXT, query_plan
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)

 

5) 문제의 쿼리 재수행

 

위 방법으로도 해결이 되지 않는다면 실행계획을 분석하여 쿼리 실행에 부하요소를 주는 근본적인 원인을 찾아야 한다.

+ Recent posts