2016-08-31 37 views
0

あるデータベースから別のデータベースにデータを移動するコンソールアプリケーションがあります。アプリケーションはデータを読み取り、更新して別のデータベースに書き込みます。クエリは非常に簡単で、エラーが発生した場合に記録されます。だから私は別々にそれぞれを実行しようとすることができ、それは50ミリ秒以上かかることはありません(プロファイラが私に言った)。しかし、私はたくさんの行を持っていて、それらのうちのいくつかを実行した後(実行された行の数が1000〜10000と非常に異なる)、タイムアウトになります。タイムアウトが切れています。操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません。 "SELECT"クエリ中でもTimeOutを取得できます。複数の単純なクエリ中に「タイムアウト」と「Aトランスポートレベルエラー」例外が発生する

CommandTimoutを120に設定しました。サーバーから結果を受け取ったときにトランスポートレベルのエラーが発生しました。 (プロバイダー:セッションプロバイダー、エラー:19 - 物理的な接続は使用できません)だから、タイムアウトのケースではないと思います。

プロファイラとトレースに予期しないものがありませんでした。

私はを使用しました。SqlConnection.ClearPool(cnnct);でも動作しません。

お願いします。

SQL Vertion:マイクロソフトのSQL Server 2008 R2(SP1)

ここでは、送信元と宛先DBSのためのコードです。

public IEnumerable<SomeType> GetEntities() 
    { 
     IEnumerable<SomeType> result = null; 
     var selectQuery = GetSelectQuery(); 

     try 
     { 
      using (var cnnct = new SqlConnection(_connectionString)) 
      { 
       cnnct.Open(); 
       var cmd = new SqlCommand(selectQuery, cnnct); 
       var reader = cmd.ExecuteReader(); 

       result = Convert(reader); 
       reader.Close(); 
       cmd.Dispose(); 
      } 
     } 
     catch (Exception e) 
     { 
      Catch(selectQuery, e); 
     } 

     return result; 
    } 

    public Int32 Save(SomeType entity) 
    { 
     Int32 result = 0; 
     var insertQuery = GetInsertQuery(entity); 

     try 
     { 
      using (var cnnct = new SqlConnection(_connectionString)) 
      { 
       cnnct.Open(); 
       var cmd = new SqlCommand(insertQuery, cnnct); 

       result = (Int32)(Decimal)cmd.ExecuteScalar(); 
       cmd.Dispose(); 
      } 
     } 
     catch (Exception e) 
     { 
      Catch(insertQuery, e); 
     } 

     return result; 
    } 
+0

あなたはそれが実際に終了したかどうかを確認するために0(無制限)にタイムアウトを設定しようとしたことがありますか? – Tanner

+0

@Tanner私はデフォルトの30を120に置き換えて、もう1つ例外があります(最初の記事で説明しました)。私は無制限が120以上であることに同意しますが、いずれにしても120秒を選んだときにタイムアウトに何の問題もありません。私は本当の理由を見つける必要があります。ありがとう。 – Bikutotoro

+0

@Tanner Zeroは役に立たなかった。しかし、どんな場合でもありがとう。 – Bikutotoro

答えて

0

"リモートクエリタイムアウト"オプションが誤って設定されている可能性がありますか?

は、あなたのインスタンスに見

Server Properties

または

EXEC sp_configure 'remote query timeout', 0 ; 
GO 
RECONFIGURE ; 
GO 
+0

クエリが単純すぎる、SELECT * FROM Entities WHERE Id = 1のようなものです。それは行のカップルを返します。データベースウィンドウでクエリに費やされた時間が50ミリ秒未満です。だから問題はタイムアウトではなく、どこかにある。私は生産に行く前に本当の問題を解決したいと思います。タイムアウトは本当の理由ではありません。そして、私は120までのタイムアウトを増やしました。タイムアウト例外は、別のものに置き換えられました(最初の記事で説明されています)。ありがとう。 – Bikutotoro

+0

タイムアウト設定を変更すると、タイムアウト設定と関係する新しいエラーが発生しています。 エラーは、物理接続に問題があることを示しています。 クライアント/サーバー接続の安定性を確認してください – Antonio

+0

この安定性をどのように確認できますか? – Bikutotoro