MSDN에 보면 sys.dm_exec_procedure_stats DMV의 경우는 캐시된 SP에 대한 집계 성능 통계를 반환한다고 나옵니다..
파라미터 스니핑 관련해서 매개변수 컴파일 값과 런타임 값을 찍어보려고 테스트 하던 중 궁금한 사항이 있어서 글을 올립니다.
우선 INT값을 파라미터 하나로 받는 A란 SP가 있다치고....
1.Ole DB 연결방식으로 DB에 접속하는 어플리케이션이 있고 A란 SP를 DROP 시키고 CREATE하여 최초 실행을 매개변수 값 1로
찍어서 실행합니다. 그러면 예상컨데 실행계획 속성의 매개 변수 런타임 값과 컴파일 값이 1로 나올것입니다.
2.그럼 SSMS에서도 A란 SP를 매개변수 값 2로 호출합니다. 이번에는 두번째 실행이겠지요. 그러면 당연히 실행계획의 속성에
매개변수 런타임 값에는 2로 나오고 컴파일의 값은 1로 나와야 합니다!! 근데 런타임과 컴파일 모두 2로 나옵니다 ㅠㅠ
3.헐 ㅠㅠ하면서 해당 SP의 object_id를 확인하여 sys.dm_exec_procedure_stats DMV를 확인하니 아니나 다를까 SP가 두개있습니다.
(DB같은데 2개)
4.그렇다면 여기서 A란 SP를 DROP 시키면 해당 DMV에서도 모두 사라집니다. 1번~3번 과정을 반복하면 똑같이 됩니다.
그렇다면 여기서 질문입니다.
질문1. SP는 하나인데 왜 캐시된 SP 집계성능 통계는 두개인가요?
질문2. 2번과정으로만 본다면 예상컨데 A SP의 매개 변수 컴파일 값이 두개라는건데 스니핑을 2번한다는건가요?
질문3. 실행계획에 속성말고 DMV등으로 특정 SP에 스니핑된 매개변수 값(매개 변수 컴파일 값)을 알 수는 없나요?
Comment 1
-
쓸만한게없네(윤선식)
2013.06.06 12:22
다음 명령을 통해 확인해 보세요.
SELECT * FROM sys.syscacheobjects
where objid = OBJECT_ID('프로시저명')
그리고 아래 내용 보시면... "아~~~" 하실 수도...
http://www.sqler.com/480611
http://www.sqler.com/351382