質問

いくつかの奇妙な動作があり、なぜ発生しているのか理解できません。断続的なタイムアウト例外が発生します。私たちの開発環境では再現できないため、ボリュームに関連していると確信しています。応急処置として、SQL コマンドのタイムアウトを 60 秒に延長してみましたが、わかったように、これは役に立たないようです。ここが奇妙な部分です。失敗しているプロセスのログを確認すると、開始時刻と終了時刻が次のように表示されます。

  • 09/16/2008 16:21:49
  • 09/16/2008 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)
役に立ちましたか?

解決

使用しているクエリの実行に時間がかかるため、SQL コマンドがタイムアウトになります。クエリ アナライザーまたは Management Studio で実行します。 データベース内の代表的な量のデータを使用して, 、実行計画を見て、何が遅いのかを見つけます。

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

他のヒント

愚かに聞こえるかもしれませんが、聞いてください。クエリに含まれるすべてのインデックスと主キーを確認してください。それらは存在するのでしょうか?それらは断片化されていますか?何らかの理由で、スクリプトを直接実行すると検索だけはうまくいきましたが、アプリケーション経由で実行すると、非常に遅かったという問題がありました。リーダーは基本的にカーソルのように機能するため、インデックス付けは非常に重要です。

これではないかもしれませんが、私が最初にチェックするのはいつもこれです。

コマンドのタイムアウト プロパティではなく、SqlConnection のタイムアウト プロパティを変更してみてください。

タイムアウトはコマンドではなく接続で発生しているためです。設定する必要があります 接続.タイムアウト 財産

私も一度この問題に遭遇したことがあり、データベースのビューの 1 つで非常に非効率な SQL コードに原因があることを追跡しました。誰かが、サブクエリを含む複雑な条件を、それが属する WHERE 句ではなく、テーブル結合の ON 句に入れていました。このエラーを修正すると、問題は解決しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top