I am maker

MSSql 스토어드 프로시져 사용시에만 Timeout에러. 잘못된게 없는데 에러나는 저장함수 호출 본문

문제해결(Trouble shootings)

MSSql 스토어드 프로시져 사용시에만 Timeout에러. 잘못된게 없는데 에러나는 저장함수 호출

코딩하는고릴라 2017. 5. 15. 16:19
반응형

난생 처음 겪는 특이한 일이었다.

4시간은 족히 쳐다본거같다.

진작에 구글링할걸,,,,,,, 에러가 워낙 신기해서 한참보다가 구글링해서 금방해결했다...


증상

c# 코드에서 갑자기 SqlConnection으로 스토어드 프로시져 호출시 timeout 에러가 난다.

이 때 SSMS(SqlServerManagementStudio)에서 동일한 매개변수로 호출 시 잘 작동한다.

또한 스토어드 프로시져 내의 쿼리를 가져와 SqlCommand의 CommandType을 text로 변경하여 날려도 잘 작동한다.

게다가 c#코드에서 동일한 쿼리를 호출하는데 파라미터 값만 살짝 다르면 잘 작동한다.


즉, c# 코드에서 스토어드 프로시져 호출시 timeout에러가 나긴하는데.

평소에는 잘 작동하고

db쿼리에서도 작동을하고,

c# 코드에서 날쿼리로 날려도 작동을하는


뭐가 문제인지 모를 상황.


Recompile하면된다.

https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/recompile-a-stored-procedure

여길 보면 DB스키마 등 변경이있을 때 , 이 옵션을 쓰면 쿼리 플랜 등을 recompile하고 최적화하여, 성능향상도 가능하다고 나와있다.




방법은 3가지

1. Stored 생성시 WITH RECOMPILE


CREATE PROCEDURE 프로시져명

@매개변수 varchar(30) = '%'

WITH RECOMPILE

AS SET NOCOUNT ON;

....



2. Stored 호출시 RECOMPILE

EXECUTE 프로시져명 WITH RECOMPILE;


3. sp_recompile 프로시져로 RECOMPILE하기

EXEC sp_recompile N'프로시져명';

반응형