SQLの問い合わせがタイムアウトするとき

SQLを実行するときに長く時間がかかるとタイムアウトするわけです。トランザクションをしながら実行すると、トランザクションもタイムアウトすることがあります。


SQLコマンドがタイムアウトしたときに起きる例外のメッセージは、以下の通り。

「実行タイムアウトの期限が切れました。操作完了前にタイムアウト期間が過ぎたか、サーバーが応答していません。」

トランザクションがタイムアウトしたときに起きる例外のメッセージは、以下の通り。

「現在の接続と関連付けられているトランザクションは完了しましたが、破棄されていません。トランザクションは、接続が SQL ステートメントの実行に使用される前に破棄されなければなりません。」


トランザクションは、原則、10分でタイムアウトするみたい。アプリ側から1時間までと時間を延ばしても効かない。パソコンの設定ファイルに追記すれば延ばせるみたいだが、勝手に追記するのがNGの場合は、どうしようもない。

逆にいえば、トランザクションが10分もかかるのは異常事態ということでよいのかもしれない。いやいや、100万行データを更新するのに10分では終わらないぞ、、、という場合は、パソコンの設定ファイルに追記するしかない。システム管理に要相談となる。

*追記(2018/6/22)

タイムアウトを20分まで延ばすとしたら、下記のように指定する。

 using (TransactionScope tr = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromMinutes(20.0)))     // 20分待ち
 {
     using (SqlConnection cn = いろいろ)
     {
         cn.Open();

         SqlCommand cmd = new SqlCommand(sql, cn);
         cmd.CommandTimeout = 60 * 20;       // 20分待ち
         cmd.ExecuteNonQuery();

         cn.Close();
     }
     tr.Complete();
 }

アプリで20分と延ばしても、10分で切れるのですけどね。

MachineSettingsSection.MaxTimeout プロパティ

このプロパティで20分と設定すればいけるのかしら???

コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。