MSSQL with recompile 질문입니다! 0 2 1,824

by 스깅 [SQLServer] mssql recompile [2021.03.14 10:10:26]


안녕하세요,

with recompile에 대한 글을 보았을때, 처음 실행된 조건으로 플랜이 캐시되는게 문제가 되므로 with recompile을 통해 새로운 계획을 잡는다고 보았습니다.

제 경우 sql server 사용 중

특정 프로시저에서 사원번호 사용시 조회 속도와, 사원명 사용시 조회 속도가 다르다는 것을 확인 후에

set statistics io on 을 통해 논리적 읽기 수를 확인 해 본 결과 io가 많이 발생하는것으로 보여서

사원번호로 조회시 with recompile을 해 주었더니 io가 현저히 줄어 든 것을 확인 할 수 있었습니다.

하지만 다시 with recompile 제거 후 사원번호로 조회시 recompile 전의 io와 동일한 결과를 확인하게 되었는데요,

이 경우에는 프로시저 실행할때마다 recompile을 해주어야 하는건지, 

왜 with recompile을 붙이지 않으면 recompile을 붙여서 조회할때와 계속 다른 값이 나오는지도 알고 싶습니다.

 

긴 글 읽어주셔서 감사합니다.

 

 

by 뉴비디비 [2021.03.14 13:11:06]

프로시저를 생성할때 WITH RECOMPILE 옵션은 실제로 프로시저가 실행 될때마다 다시 컴파일 하고, 
저장된 프로시저를 실행할때 WITH RECOMPILE 설정은 세션단위 설정으로 실행할 때마다 적용은 되지만, 실제 프로시저 컴파일은 변경되지 않는 것으로 알고 있습니다. 
그래서 프로시저 실행할때 WITH RECOMPILE 설정 여부에 따라 처리결과가 달라질 수 있습니다. 

향후 운영에 프로시저가 계속 문제가 되면, sp_recompile 로 재컴파일 하시거나 프로시저를 다시 작성하시는게 나을 수도 있습니다. 


by 마농 [2021.03.15 13:28:17]

프로시저 내부 로직(쿼리)을 아예 분기처리 하세요.
사원번호 조회시 쿼리 / 사원명 조회시 쿼리

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입