WorkProcessSearchサービス実行の間にSqlCommand TimeOutの発生

来源:互联网 发布:光电国家实验室 知乎 编辑:程序博客网 时间:2024/05/16 14:24

现象:---错误日志如下----

      ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓【例外ログ】↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
      案件検索サービスで異常が発生しました。
      日時:2013/05/07 11:38:24
      ソース:.Net SqlClient Data Provider
      タスクカテゴリ:ExchangeUSE System Exception
      レベル:2
      イベントID:1
      ユーザー:ExchangeUSE User
      パソコン:HATHEUA01
      Exception種別:WPI
      エラーコード:WPI-000001
      エラーメッセージ:Timeout に達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。
      スタックトレース:
Server stack trace: 
   場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   場所 System.Data.SqlClient.SqlDataReader.SetMetaData(_SqlMetaDataSet metaData, Boolean moreInfo)
   場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   場所 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   場所 System.Data.SqlClient.SqlDataReader.get_MetaData()
   場所 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   場所 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   場所 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   場所 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   場所 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
   場所 Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteReader(DbCommand command, CommandBehavior cmdBehavior)
   場所 Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteReader(DbCommand command)
   場所 ExchangeUSE.WorkProcessSearch.EntityResultBpcWpi.GetResultBpcWpiCountPerBpc(CurrentUserSet& userSet, String mbrUid, List`1& depUidList, List`1& bpcIdList) 場所 C:\ExchangeUSE\V10L40\緊急パッチ対応\L40-PTF\ExchangeUSE.WorkProcessSearch.Entity\EntityResultBpcWpi.vb:行 1419


Exception rethrown at [0]: 
   場所 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   場所 ExchangeUSE.WorkProcessSearch.IEntityResultBpcWpi.GetResultBpcWpiCountPerBpc(CurrentUserSet& userSet, String mbrUid, List`1& depUidList, List`1& bpcIdList)
   場所 ExchangeUSE.WorkProcessSearch.WorkProcessSearch.GetResultBpcWpiCountPerBpc(CommandMessage& cmd, CurrentUserSet& userSet) 場所 C:\ExchangeUSE\V10L40\緊急パッチ対応\L40-PTF\ExchangeUSE.WorkProcessSearch.Core\WorkProcessSearch_GET_RESULT_BPC_WPI_COUNT_PER_BPC.vb:行 125
   場所 ExchangeUSE.WorkProcessSearch.WorkProcessSearch.Execute(CommandMessage cmd) 場所 C:\ExchangeUSE\V10L40\緊急パッチ対応\L40-PTF\ExchangeUSE.WorkProcessSearch.Core\WorkProcessSearch.vb:行 241
   場所 SyncInvokeExecute(Object , Object[] , Object[] )
   場所 System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
   場所 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
      ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑【例外ログ】↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    


      ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓【例外ログ】↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
      案件検索サービスで異常が発生しました。
      日時:2013/05/07 11:43:43
      ソース:.Net SqlClient Data Provider
      タスクカテゴリ:ExchangeUSE System Exception
      レベル:2
      イベントID:1
      ユーザー:ExchangeUSE User
      パソコン:HATHEUA01
      Exception種別:WPI
      エラーコード:WPI-000001
      エラーメッセージ:Timeout に達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。
      スタックトレース:
Server stack trace: 
   場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   場所 System.Data.SqlClient.SqlDataReader.SetMetaData(_SqlMetaDataSet metaData, Boolean moreInfo)
   場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   場所 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   場所 System.Data.SqlClient.SqlDataReader.get_MetaData()
   場所 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   場所 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   場所 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   場所 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   場所 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
   場所 Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteReader(DbCommand command, CommandBehavior cmdBehavior)
   場所 Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteReader(DbCommand command)
   場所 ExchangeUSE.WorkProcessSearch.EntityResultBpcWpi.GetResultBpcWpiCountPerBpc(CurrentUserSet& userSet, String mbrUid, List`1& depUidList, List`1& bpcIdList) 場所 C:\ExchangeUSE\V10L40\緊急パッチ対応\L40-PTF\ExchangeUSE.WorkProcessSearch.Entity\EntityResultBpcWpi.vb:行 1419


Exception rethrown at [0]: 
   場所 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   場所 ExchangeUSE.WorkProcessSearch.IEntityResultBpcWpi.GetResultBpcWpiCountPerBpc(CurrentUserSet& userSet, String mbrUid, List`1& depUidList, List`1& bpcIdList)
   場所 ExchangeUSE.WorkProcessSearch.WorkProcessSearch.GetResultBpcWpiCountPerBpc(CommandMessage& cmd, CurrentUserSet& userSet) 場所 C:\ExchangeUSE\V10L40\緊急パッチ対応\L40-PTF\ExchangeUSE.WorkProcessSearch.Core\WorkProcessSearch_GET_RESULT_BPC_WPI_COUNT_PER_BPC.vb:行 125
   場所 ExchangeUSE.WorkProcessSearch.WorkProcessSearch.Execute(CommandMessage cmd) 場所 C:\ExchangeUSE\V10L40\緊急パッチ対応\L40-PTF\ExchangeUSE.WorkProcessSearch.Core\WorkProcessSearch.vb:行 241
   場所 SyncInvokeExecute(Object , Object[] , Object[] )
   場所 System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
   場所 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
   場所 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

      ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑【例外ログ】↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑



原因分析:

SqlServer 的查询,.net中使用了SqlCommand来完成。对于一个数据库查询来说,超时一般有两种,一是数据库连接的超时,二是SQL语句执行超时。

数据库连接的超时的情况下,异常会发生在connection的初始化(SqlInternalConnection),所以加亮的那句话的异常将不会出现在错误函数的队列里。


上述错误就是典型的SQL语句执行超时。


対策:


① 优化SQL语句,使之查询能够在限定的时间内完成

      V10L50有针对数据库表的关键字等做索引,旨在缩短查询语句的执行时间。

②  手动设置CommandTimeout ,将等待时间延长(默认30,单位秒)

      SqlCommand.CommandTimeout = 60 






原创粉丝点击