web-dev-qa-db-ja.com

SqlCommandオブジェクト、CommandTimeoutの時間の長さは?

SqlCommandオブジェクトを使用する場合、タイムアウトとして使用する時間の長さをどのように決定しますか?

私が取り組んでいるコードの一部(他の誰かが書いたもの)には、次のようなものがあります。

cmd.CommandTimeout = 60;

かなり短いと思います。ただし、フォーラムでは、長すぎるように見える30000に設定することについて話している人を見かけました。

アプリケーションに最適なものを知るにはどうすればよいですか?

25
bobble14988

これが秒かミリ秒かについて、人々は混乱しているようです。 documentation は、タイムアウトが秒単位であることを示しています。 1分のタイムアウトは、ほとんどのクエリにとって妥当なようです。 8時間以上のタイムアウトは妥当ではないようです

1分以上かかると予想されるクエリはありますか?その場合は、すべてが正常に機能している場合に表示される値よりも高いと予想される値まで上げますが、問題を警告するまでに時間がかかるほど高くはありません。 (たとえば、1分から5分になる場合があります。)

41
Jon Skeet

デフォルト値は30秒​​です( http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx )。

データベースが同じマシン上にある場合は、通常、データベースを変更する必要はありません。試してみてください。接続タイムアウトが発生した場合は、値を増やしてください。

6
Peter

可能な限り最長のクエリにかかる時間を計算し、その値に1.5を掛けてサーバーの過負荷、ネットワークトラフィックなどを処理する必要があります。

これは秒単位であり、実際のSQLコマンドがかかる可能性のある時間に完全に依存します。

たとえば、ほとんどのコマンドはsprocを実行しますが、完了するまでに30秒もかかりませんが、実行時間が非常に長いカップルもあります。つまり、独自の高いタイムアウト値を持っています。

ルーチンの平均所要時間をプロファイリングしてから、それに応じてタイムアウトを調整し、レイテンシなどの変数のための余地を残すことを忘れないでください。

2
Lloyd

SqlCommand.CommandTimeoutは、コマンドの実行試行を終了する前の待機時間を設定するために使用されます。つまり、SqlCommandに特定のSQLクエリまたはストアドプロシージャを実行して、完了するまで待機する時間を指定します。コマンドが指定された時間内に完了しない場合、コマンドは終了し、例外がスローされます。

したがって、CommandTimeoutの値の設定は、アプリケーションと要件に完全に依存します。実行しているSQLステートメントまたはストアドプロシージャに60より大きい値を設定するだけで十分であるとわかっている場合、60秒はステートメントの完了を待つのに十分です。

1
Waqas