4

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

  • 2008 年 9 月 16 日 16:21:49
  • 2008 年 9 月 16 日 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)
4

5 に答える 5

4

使用しているクエリの実行にそれよりも時間がかかるため、SQL コマンドがタイムアウトします。データベース内の代表的な量のデータを使用して、Query Analyzer または Management Studio で実行し、実行計画を見て何が遅いかを調べます。

何かにかなりの時間がかかっていて、それが「テーブル スキャン」または「クラスター化インデックス スキャン」として説明されている場合は、その操作をキー ルックアップ (インデックス シークまたはクラスター化インデックス) に変えるインデックスを作成できるかどうかを調べます。求める)。

于 2008-09-17T00:39:03.523 に答える
4

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

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

于 2008-09-16T20:53:19.680 に答える
1

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

于 2008-09-16T20:50:24.103 に答える
1

コマンドではなく接続でタイムアウトが発生しているためです。connection.TimeOutプロパティを設定する必要があります

于 2008-09-16T20:51:06.037 に答える
1

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

于 2008-09-16T20:58:00.403 に答える