안녕하세요.
특정 함수가 갑자기 너무 느려서 분석을 진행했습니다.
단순한 변수선언,변수할당,변수사용을 하는 부분이 갑자기 이상증상을 보입니다.
1.
select * from A where seq=5
2.
declare @Seq int
SET @Seq=5
select * from A where seq=@Seq
1번 형식으로 실행하면 1초도 걸리지 않는데 2번 형식은 20초를 넘기고 있습니다.
계속 검색을 진행하다가 검색된 결과이고
http://dba.stackexchange.com/questions/33698/parameter-sniffing-vs-variables-vs-recompile-vs-optimize-for-unknown
http://www.sqlserver.info/syntax/option-recompile/
내용과 같이 쿼리를 수정하여
declare @Seq int
SET @Seq=5
select * from A where seq=@Seq
OPTION (RECOMPILE)
실행시 0초도 걸리지 않게 나오고 있습니다.
일단 내용대로 적용은 해야 할거 같은데...
사이드 이펙트가 생기거나 제한사항이 있을지 궁금해서 질문을 남깁니다.
감사합니다.
플랜이 캐시되지 않으므로 매번 컴파일 해야하는 이슈가 있겠네요,,,
cpu를 좀 쓰겠지요,, 위의 상황이라면 플랜을 2가지 형태로 분리하든지 그냥 recompile 하는게 좋을꺼 같습니다,,
(장문 썻다가 날려서 대략적으로만 씁니다;;)
http://sqlsql.tistory.com/132 참고할 만한 글 입니다,,