2009-03-05 3 views
7

2 년 전부터 수정없이 계속 실행중인 웹 서비스가 있습니다. 갑자기 오늘은 함수가 좋지 않다고 결정하고 SQL 시간 초과를 throw합니다.SQL Server 시간 초과 문제 해결

System.Data.SqlClient.SqlException : 제한 시간이 만료되었습니다. 작업이 완료되기 전에 시간 초과 기간이 경과되었거나 서버가 응답하지 않습니다.

이 웹 서비스는 데이터베이스와 동일한 서버에 있으며, SQL 추적에서 쿼리를 가져와 관리 스튜디오에서 실행하면 잠시 후에 반환된다는 점에 흥미를 느끼게됩니다. 하지만 정확히 30 초가 지난 후 웹 서비스에서 아무런 문제없이 호출되면 시간이 초과되었습니다. 엔터프라이즈 라이브러리를 사용하여 데이터베이스에 연결하므로 무작위로 시작하지 못했다고 상상할 수 없습니다.

갑자기 무엇이 작동을 멈출 수 있는지 잘 모르겠습니다. 내가 가지고있는 응용 프로그램 풀을 재활용했고 심지어 사용하고있는 것으로 보이는 SQL 프로세스를 다시 시작했습니다. 같은 행동. 어떤 식 으로든이 문제를 해결할 수 있습니까?

업데이트 : 미치 입니다. sproc 정의에서 "AS"키워드 앞에 "RECOMPILE"을 추가하자마자, 그것은 다시 살아났습니다. 브라보!

+0

@Chris : 마지막 도랑 일을 제외하고는 RECOMPILE을 (를) 사용해서는 안됩니다. RECOMPILE FOR을 사용하는 것이 훨씬 더 목표입니다. –

답변

4

설명하는 증상은 캐시 된 쿼리 계획이 잘못되어 99.9 %를 차지합니다.

이 답변을 참조하십시오 : 인덱스를 다시 작성 및 통계 출발점으로 최신 상태로 보장하기 위해 조언을 포함

합니다.

정기적 인 인덱스 유지 관리 작업을 예약하고 활성화 했습니까?

정식 참조는 다음과 같습니다 Slow in the Application, Fast in SSMS?

+0

당신은 내 영웅입니다. – Chris

1

는 모든 관련 인덱스를 다시 작성.

1

통계를 업데이트하십시오. 프로파일 러에서 쿼리의 옵션 설정을 확인하십시오. SSMS가 다른 연결 세트 옵션을 사용 중일 수 있습니다.