2012-06-01 5 views
0

MS SQL Server 2008을 사용하고 있는데 다음과 같은 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 시간 초과를 60 초로 설정하는 것이 좋은 방법이라고 생각하십니까? SQL Server : 제한 시간이 만료되었습니다.

명령 제한 시간을 변경할 수 있는지 여부

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. Stack Trace: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 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.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) at Karkas.Core.DataUtil.HelperFunctions.SorguCalistir(DataTable dt, SqlCommand cmd) at Karkas.Core.DataUtil.HelperFunctions.SorguCalistir(DataTable dt, String sql, CommandType cmdType, SqlParameter[] parameters) at Karkas.Core.DataUtil.AdoTemplate.DataTableDoldur(DataTable dataTable, String sql, CommandType commandType, SqlParameter[] parameters) at Karkas.Core.DataUtil.AdoTemplate.DataTableOlustur(String sql, SqlParameter[] parameters) at 
+1

_ "시간 초과를 60 초로 설정하는 것이 좋은 방법이라고 생각하십니까?"_ 이전의 상황에 따라 300 초가 될 수 있습니다.) SqlConnection의 ConnectionTimeout이 아니라 SqlCommand의 CommandTimeout을 변경해야합니다. –

+0

많은 시간이 걸리는 쿼리를 개선 할 수 없다면 아무 문제도없는 것 같습니다. –

+0

@TimSchmelter, 기본적으로 30 초로 설정되었습니다. 나는 그것을 할거 같아요, 그게 도움이되는지 아닌지 볼 수 있습니다 :) –

답변

2

는 몇 가지에 따라, 시간 내 주셔서 감사합니다. 먼저 시간 초과가 발생하는 이유를 먼저 알아야한다고 생각합니다.

  • 한 번에 너무 많은 정보를 가져오고 있습니까?
  • 어떻게 든 성능을 향상시킬 수 있습니까? 어쩌면 관련 테이블에 som 인덱스를 추가할까요? 당신을 차단 테이블 잠금
  • 다른 프로세스 (또는 다른 프로세스) 거기, 당신은 이유를 알아 낸 후 명령 제한 시간을 늘리는 것이 옳은 일 경우

, 당신은 다음 결정할 수 있습니다 쿼리합니다. 그러나 특히 문제가 외부 프로세스에 의해 차단되는 경우 시간 초과를 늘리는 것이 매우 주저합니다. 문제가 악화 될 수 있습니다.

+0

+1 테이블에 잠금 장치가 있다고 가정합니다. –

+0

테이블을 선택할 때 항상 WITH (NOLOCK) 명령을 사용합니다. 이 문제와 관련이 있다고 생각하십니까? –

+0

Nolock 힌트가 시간 초과에 기여하지 않는 것 같습니다. 그러나 데이터 무결성의 관점에서 보면 그 힌트를 사용하는 것은 나쁜 습관입니다. 예를 들어 [link] (http://blogs.msdn.com/b/davidlean/archive/2009/04/06/sql-server-nolock-hint-other-poor-ideas.aspx)를 참조하십시오. 세부 사항이 없으면 왜 시간 초과가 발생하는지 말할 수 없습니다. – user1429080

관련 문제