SELECT TOP 300 ST.TEXT, CP.CACHEOBJTYPE, CP.OBJTYPE, CP.REFCOUNTS, CP.USECOUNTS, CP.SIZE_IN_BYTES, CP.BUCKETID, CP.PLAN_HANDLE
FROM SYS.DM_EXEC_CACHED_PLANS CP
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(CP.PLAN_HANDLE) ST
WHERE CP.CACHEOBJTYPE = 'Compiled Plan'
AND CP.OBJTYPE = 'Adhoc'
ORDER BY usecounts desc
을 실행했을때
usecount 가 1이면서 똑같은 쿼리가 수십개씩 있는게 잘못된건가요?
아니면 한개의 쿼리가 usecount를 여러개 가지고 있는게 잘못된건가요?
전자의 경우엔 프로시저로 만든건데도 adhoc으로 잡혀 있는데 이게 원래 이런건지도 궁금합니다.
실행하려는 쿼리에 해당하는 플랜이 있는지를 확인할때
ADHOC쿼리는 쿼리문 전체가 키 입니다.
예를 들어서 SELECT * FROM 테이블 WHERE PK = '1' 이라는 쿼리를 날렸을때
딱 저 문장에 해당하는 플랜이 없으면 새로 플랜을 만듭니다.
아마 프로시저로 안만들고 계속 ADHOC으로 날렸다면 USECOUNT가 1인거가 엄청 많아지는게 정상이죠.