안녕하세요,

쿼리 실행 관련해 궁금한 것이 있어 질문드립니다.


동일한 쿼리를 응용프로그램과 SQL Management 에서 실행하였는데 응용 프로그램에서는 Timeout Error 가 발생합니다.

무엇이 문제인지 궁금합니다.


자세한 상황은 아래와 같습니다.

현재 응용프로그램에서 Select 쿼리를 사용합니다.

응용 프로그램에서 Select 쿼리를 SqlDataAdapter 클래스의 객체를 생성할 때 사용해 데이터를 받아와 데이터 테이블에 담습니다.

코드는 아래와 같습니다.

string query = "Select A from B";

DataTable table = new DataTable();


using (SqlDataAdapter adapter  = new SqlDataAdapter(this.query))

{

adapter.Fill(table);

}


그런데 Fill 을 수행하는 과정에서 Timeout Error 가 간헐적으로(꽤 자주) 발생합니다.

쿼리의 문제이거나 DB 성능의 문제인가 싶어서 SQL Management 에서 직접 동일한 쿼리를 실행해보았는데

이 때는 큰 시간의 부하 없이 정상적으로 작동하였습니다.


동일한 쿼리의 실행인데 응용프로그램에서만 문제가 발생하는 것은 응용프로그램에 문제가 있는걸까요?


추가로 에러 로그에 남은 Fill 이후의 진행을 붙입니다.

------------------------------------------------------------------------------------------------------------------------------------------------

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.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)

-----------------------------------------------------------------------------------------------------------------------


SqlDataAdapter 클래스에 대해 잘 아시거나 추측되는 문제가 있어보이시면 답글 부탁드립니다.