2008-09-16 14 views
3

왜 내가 발생하는지 파악하는 데 문제가있는 호기심 많은 행동이 있습니다. 나는 간헐적 인 타임 아웃 예외를보고있다. 나는 우리의 개발 환경에서 재현 할 수 없기 때문에 볼륨과 관련이 있다고 확신한다. 붕대 해결책으로, 나는 SQL 명령 시간 초과를 60 초로 올리려고했지만, 내가 찾은 것처럼, 이것은 도움이되지 않는다.문제 해결 제한 시간 SqlExceptions

  • 2008년 9월 16일 16시 21분 49초
  • 2008년 9월 16일 16 : 나는 시작 시간과 종료 시간을 여기, 실패하는 과정에 내 로그를 확인하는 경우 여기에 이상한 부분입니다 : 22 : 19

이렇게하면 명령 대기 시간을 60으로 설정하면 30 초 내에 시간이 초과 될 수 있습니까 ?? 그냥 참조

, 여기에 슬로우되는 예외입니다 :

System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 
    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 
    at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 
    at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 
    at System.Data.SqlClient.SqlDataReader.get_MetaData() 
    at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteReader() 
    at SetClear.DataAccess.SqlHelper.ExecuteReader(CommandType commandType, String commandText, SqlParameter[] commandArgs) 

답변

3

사용중인 쿼리가 실행하는 데 걸리는 시간보다 오래 걸리므로 SQL 명령이 시간 초과되었습니다. 쿼리 분석기 또는 Management Studio에서 데이터베이스의 대표 데이터 양을 사용하여 을 실행하고 실행 계획을보고 느린 것을 찾습니다.

시간이 많이 소요되고 '테이블 스캔'또는 '클러스터 된 인덱스 스캔'으로 설명되는 경우 해당 작업을 키 조회 (인덱스)로 만들 수있는 색인을 만들 수 있는지 살펴보십시오. seek 또는 클러스터 된 인덱스 찾기).

+0

새로운 색인을 추가해야한다는 것이 판명났습니다. –

0

오히려 시간 제한은 연결이 아니라 명령에 무슨 일이 일어나고 있기 때문에 명령

0

의보다는도록 SqlConnection의 제한 시간 속성을 변경하십시오 . connection.TimeOut 속성을 설정해야합니다.

3

이 말은 어리석은 소리일지도 모릅니다. 쿼리에 관련된 모든 인덱스와 기본 키를 확인하십시오. 그들은 존재합니까? 그들은 조각 났습니까? 문제가 생겨서 어떤 이유에서든 스크립트를 완전히 실행하면 문제가 발생하지만 응용 프로그램을 통해 실행하면 더러 웠습니다. 독자는 기본적으로 커서와 같은 역할을하므로 인덱싱은 매우 중요합니다.

이것은 그렇지 않을 수도 있지만 항상 내가 확인한 첫 번째 것입니다.

0

이 문제는 한 번 발생했으며 데이터베이스 뷰 중 하나에서 실제로 비효율적 인 SQL 코드를 추적했습니다. 누군가가 속한 WHERE 절이 아닌 테이블 조인의 ON 절에 하위 쿼리가있는 복잡한 조건을 넣었습니다. 이 오류를 수정하면 문제가 해결되었습니다.