본문 바로가기

프로그래밍/MSSQL

[MSSQL] RECOMPILE 저장 프로시저 리컴파일 (c# 프로시저 timeout 에러)

반응형

 

 

 

 

 

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 인덱스 강제 설정 (테이블 힌트)

 

 

 

반응형