반응형
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 인덱스 강제 설정 (테이블 힌트)
반응형
'프로그래밍 > MSSQL' 카테고리의 다른 글
[MSSQL] WITH INDEX 인덱스 강제 설정 (테이블 힌트) (0) | 2020.02.04 |
---|---|
[MSSQL] ARITHABORT (웹 서비스단 프로시저 timeout 이슈) (0) | 2020.01.31 |
[MSSQL] NOT MATCHED BY SOURCE ('DELETE' 유형의 동작은 MERGE 문의 'WHEN NOT MATCHED' 절에 사용할 수 없습니다.) (0) | 2020.01.07 |
[MSSQL] BULK INSERT (CSV/TXT 파일 결과 저장 & 파일 INSERT) (1) | 2019.12.18 |
[MSSQL] 사용자 정의 데이터 형식을 이용한 프로시저 집합기반 처리 (프로시저 테이블 파라미터 TVP) (0) | 2019.12.17 |