SqlBulkCopy.BulkCopyTimeout プロパティ
-
18-09-2019 - |
質問
私は VSTS 2008 + C# + .Net 3.5 + ADO.Net を使用して、一括挿入コピーを行うコンソール アプリケーションを開発しています。
一括挿入バッチと一括挿入タイムアウト プロパティの両方を使用したいと考えています。BulkCopyTimeout プロパティについて混乱しており、バルク全体に適用されるのか、バルクの各バッチにのみ適用されるのか知りたいのですが。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx
よろしくお願いします、ジョージ
解決
ウェブ上でいくつかのブログ投稿やフォーラムの投稿を検索して読んで、実際にはない全体的な動作にはなく、操作の各バッチには適用されないSqlBulkCopyTimeout
を示すために表示されます。
MSDNドキュメントはこの上で完全に明確ではないが、ほとんどのポストはタイムアウトがバッチに適用されることを示しているように見えます。バッチサイズを小さくおよび/または増加SqlBulkCopyTimeoutは、ほとんどの場合、問題をタイムアウトするためのソリューションであるように思われる。
このフォーラムの投稿を参照してください。例のよう。
マルク
他のヒント
一括コピーのタイムアウト:デフォルトでは 30 秒です
sqlBulkCopy.BulkCopyTimeout = {time in seconds for one batch}
バッチサイズ:デフォルトでは、データソース全体が 1 つのバッチになります
sqlBulkCopy.BatchSize = {no of rows you want to insert at once}
詳細については、次のリンクを参照してください。SqlBulkCopy でタイムアウトが経過しました
この例外「タイムアウトの有効期限が切れています」を取得します。アプリケーションが30秒でデータソースを挿入できない場合。
これは、1つのバッチのための全体的な動作に適用されます。あなたの接続タイムアウトも同様に設定されていることを確認する必要があります。私はまた、接続時間という問題を出し、前にタイムアウトを打つ一括コピーでそれを設定し、ハードな方法を発見しました。
全体の動作のコンセプトは面白いだと思われます。それは一度に複数のタイムアウトを待って終わる場合、それは失敗します。バッチの読み取りがアウト時間以上を要し言い換えれば、それは失敗しますが、すべての読み込みの合計がある場合>あなたは大丈夫だタイムアウト。バッチの書き込みは時間がかかりすぎる場合は、それも失敗します。
しかし、バッチ全体ではなく、ものによってバッチのようです。
これは、バルク・コピーのための理想的なタイムアウトを見つけることは容易ではありません。あなたは小さなタイムアウトを選択した場合、タイムアウトエラーが発生する可能性があるので、あなたは、大きなバッチサイズを選択しないでください。あなたは小さなバッチ・サイズを選択することにした場合、別の側では、サーバーからタイムアウトエラーを持っている少ないチャンスを持っています。しかし、あなたは安全ではありませんです。
私の推薦は、すなわち、無制限にタイムアウトを設定(sqlBulkCopy.BulkCopyTimeout = 0)、およびお使いのバルク・コピーのためのかなりのバッチ・サイズを選択しようとすることです。少なくとも、あなたはタイムアウトexcepectionを持っていないことができます。