1

したがって、実行するプロセスがあり、DB を呼び出してデータを取得します。SQL Server Management Studio から呼び出される proc を実行すると、実行に 6 ~ 15 分かかりますが、完了します。コードで実行すると、常にタイムアウトします。私の推測では、コードの予想されるタイムアウト範囲を超えていますが、Management Studio インターフェイスを介して直接実行されるため、可能であれば proc は実際には実行されます。

例外の詳細は次のとおりです。

InnerException: System.Data.SqlClient.SqlException
       Message=Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
       Source=.Net SqlClient Data Provider
       ErrorCode=-2146232060
       Class=11
       LineNumber=0
       Number=-2
       Procedure=""
       Server=KSQCOREDBINT
       State=0

そして、それがまったく役立つ場合のスタックトレースは次のとおりです。

StackTrace:
            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.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
            at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
            at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
            at Chatham.Panda.DataAccessLayer.CoreDataContext.sp_calc_schedule_rates_retrieve(Nullable`1 se_sched_id) in c:\TeamCity\BuildAgent02\work\36e300184c20475\Chatham.Panda.DataAccessLayer\Core.designer.cs:line 2306
            at Chatham.Panda.EndOfDay.EodDataAccess.<>c__DisplayClass15.<SpCalcScheduleRatesRetrieve>b__14(CoreDataManager coreDataManager) in C:\svn\K2\trunk\panda\ScheduleBuilderService\Chatham.Panda.EndOfDay\EodDataAccess.cs:line 134
            at Chatham.Panda.EndOfDay.EodDataAccess.RunStoredProc[T](Func`2 storedProcDelegate, String storedProcName) in C:\svn\K2\trunk\panda\ScheduleBuilderService\Chatham.Panda.EndOfDay\EodDataAccess.cs:line 21

とにかく、割り当てられたタイムアウト範囲か何かを増やすことができますか? ストアド プロシージャの改善に継続的に取り組んでいますが、それは DB チーム次第です。自分の側で何かできるかどうかを確認しようとしているだけです。

ありがとう。

4

2 に答える 2

4

追跡するタイムアウトは最大3つあります

  • 接続タイムアウト-データベースへの接続を開くのにかかる時間
  • コマンドタイムアウト-これが今あなたに当てはまるものです。これは、クエリが終了するまでに実行できる時間です。
  • ページのタイムアウト-あなたが言うのを見ませんでしたが、これがASP.NETページの場合、ページのタイムアウトに遭遇する可能性があります
于 2011-11-28T17:32:25.320 に答える
4

使用しているクエリの実行にかかる時間が長くなるため、SQLコマンドがタイムアウトします。データベース内の代表的な量のデータを使用して、QueryAnalyzerまたはManagementStudioで実行し、実行プランを調べて、何が遅いかを確認します。

何かが時間の大部分を占めており、「テーブルスキャン」または「クラスター化インデックススキャン」として記述されている場合は、その操作をキールックアップ(インデックスシークまたはクラスター化インデックス)に変換するインデックスを作成できるかどうかを確認してください求める)。

タイムアウトSqlExceptionsのトラブルシューティング

SqlCommandでCommandTimeoutを設定できます。

objCmd.CommandTimeout = 600

SqlConnection.ConnectionTimeoutは読み取り専用プロパティです

于 2011-11-28T17:46:05.857 に答える