SQL Server 쿼리가 느려졌을 때
운영환경에서 데이터가 증가하면서 혹은 통계업데이트에 의해 실행계획이 변경되어 쿼리가 갑자기 이전보다 확 느려질 수 있다.
아래와 같은 방법으로 실행계획을 확인할 수 있다.
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) 문제의 쿼리 재수행
위 방법으로도 해결이 되지 않는다면 실행계획을 분석하여 쿼리 실행에 부하요소를 주는 근본적인 원인을 찾아야 한다.