안녕하세요.
업무를 하다가 알게된 사실인데 이해가 잘 안되어서 질문에 올립니다.
동일한 프로시저와 파라미터로 C#에서 Program에서 호출할 때와 SSMS에서 동일 쿼리를 실행할때
실행계획도 동일한데, Pland이 두개가 올라가는 현상이 발생합니다.
혹시 이유가 무엇인지 알수 있을까요?
SELECT *
FROM sys.dm_exec_cached_plans CP
LEFT JOIN SYS.dm_exec_procedure_stats PS ON CP.plan_handle = PS.plan_handle
OUTER APPLY sys.dm_exec_query_plan(CP.PLAN_HANDLE) TP
WHERE OBJECT_ID = OBJECT_ID('up_DIS_PeekingPackingDTL_R01')
쿼리로 확인하였습니다.
'up_DIS_PeekingPackingDTL_R01' 는 프로시저 명입니다.
Comment 6
-
NiceHee
2013.08.22 11:29
SSMS 의 옵션은 어디서 볼지 알겠는데,혹시 C#에서 호출하는 세션들의 옵션값들을 DBMS에서 볼 수 있을까요?
APP의 세팅값을 봐야 하나요?
-
sys.dm_exec_sessions를 참조하시면 됩니다.
자세한 내용은 BOL....
-
NiceHee
2013.08.22 17:04
좋은 정보 감사드립니다.
-
NiceHee
2013.08.22 11:43
초짜해커님의 댓글을 보고 테스트를 해봤습니다.
SSMS에서 동일한 쿼리를 실행할때 세션마다 옵션을 바꾸어서 실행했더니,
Plan이 새롭게 생기네요...
초짜해커님 감사합니다.
새로운 사실을 알게 되었습니다.
-
솔이
2013.08.22 13:15
동일한 프로시져라도 세션의 옵션이 다르면 플랜이 새로 생성됩니다.
SSMS의 옵션과 응용프로그램의 다음 옵션을 비교해보세요.
ANSI_DEFAULTS
ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
CONCAT_NULL_YIELDS_NULL