프로그래밍/MSSQL
[MSSQL] RECOMPILE 저장 프로시저 리컴파일 (c# 프로시저 timeout 에러)
초보개발자꽁쥐
2020. 1. 30. 21:01
반응형
recomplie에 대해 알아보기 전에 먼저 c# 프로시저 timeout 에러 상황에 대해 설명해보겠습니다.
저장 프로시저를 호출하는 c# 코드에서 timeout 에러가 발생했다.
그런데.. 해당 저장 프로시저를 SSMS에서 실행해보니, 0초도 안돼서 결과를 뱉어낸다.
파라미터 값마저 동일하게 해봐도 똑같다.
도대체 이게 무슨 상황인지..?
이 상황은 RECOMPLIE을 통해 해결할 수 있었습니다.
recomplie 방법은 3가지이고, 저는 첫 번째 방법으로 해결하였습니다.
1. 프로시저에 RECOMPILE 쿼리 힌트
CREATE PROCEDURE dbo.USP_FOOD_LIST
(
@id INT
)
WITH RECOMPILE
AS
BEGIN
... 쿼리문
END
2. WITH RECOMPILE 옵션
EXECUTE USP_FOOD_LIST WITH RECOMPLIE;
3. sp_recompile 시스템 저장 프로시저
EXEC sp_recompile N'dbo.USP_FOOD_LIST';
+추가
쿼리문 마지막에 option으로 recomplile을 줘도 된다.
SELECT col1, col2
FROM table1
OPTION (RECOMPILE)
참고
https://docs.microsoft.com/ko-kr/sql/relational-databases/stored-procedures/recompile-a-stored-procedure?view=sql-server-ver15
프로시저가 처음 컴파일되거나 다시 컴파일될 때 프로시저의 쿼리 계획은 데이터베이스와 해당 개체의 현재 상태에 맞게 최적화된다고 한다.
처음 프로시저가 컴파일될 때가 문제였을까..? 모르겠다.. 아무튼 해결..!
+ 해결된 줄 알았으나.. 아니었다.. 다시 같은 현상 발생
다른 방법으로 해결!
아래 글 참고
[MSSQL] ARITHABORT (웹 서비스단 프로시저 timeout 이슈)
[MSSQL] WITH INDEX 인덱스 강제 설정 (테이블 힌트)
반응형