본문 바로가기
프로그래밍/DBMS

MSSQL 플랜캐시 확인 쿼리

by zoo10 2013. 9. 25.

얼마 전 서버 이전 작업을 했다. 그런데 정상으로 작동하던 시스템이 조금 꼬이는 현상이 발견됬다.

그중 특이한 증상 중 하나...


쿼리 분석기와 클라이언트(웹단)의 프로시저 실행 속도의 차이가 발생하는 것이었다. 웹단은 팝업창이 실행되면서 콤보 박스에 데이터를 세팅하는 부분이 있었는데, 그 프로시저에 문제가 발생하게 된 것.

프로파일러로 추적하니 15초가 소요되는 것을 발견, 쿼리분석기로 직접 실행하니 1초. 하참~~

이런 저런 방법을 써봤으나, 무용지물. 해결 방법 찾던 중 아래의 프로시저의 플랜캐시 확인에 대한 글이 있어서 참조해 봤다. 해결은 이 글과는 크게 상관 없었지만 힌트는 얻을 수 있었다. 

아래는 플랜캐시를 확인했던 쿼리와 펌링크이다.

출처 : http://www.sqler.com/269485

쿼리

SELECT cp.objtype, cp.cacheobjtype, cp.size_in_bytes, cp.refcounts, cp.usecounts, st.text --, *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
WHERE cp.objtype = 'Proc'
        AND st.text NOT LIKE '%SELECT cp.objecttype%'
        AND st.text NOT LIKE '%@BatchID%'
        AND st.text NOT LIKE '%@_msparam%'
        AND st.text NOT LIKE '%database%'
        AND st.text NOT LIKE '%objtype%'
ORDER BY cp.objtype


최종 해결은 허무하게도 프로시져 재컴파일이었다.


어헝헝헝.....