- PR -

基になる接続エラー

投稿者投稿内容
だんご虫
会議室デビュー日: 2006/07/30
投稿数: 18
投稿日時: 2006-07-30 21:39
はじめまして、だんご虫と申します。
.NET暦・SQLSERVER暦ともに半年と短く、
今回発生したエラーにどのように対応をしたらよいかわからず、
皆様のお知恵をお借りしたいと思い投稿させて頂きました。

エラー状況
スマートクライアントによるWINDOWSシステムのアプリケーションにて、
クライアントから集計処理(データ数は多くても10万件未満)を実行し、
サーバ側で処理が行われるのですが、
サーバ側でのSQLによる集計処理中に、5分程度経過した際に、
「基になる接続エラー」が発生してしまう状況です。
別の処理が小さな集計(データ数が少ない)ではエラーは発生しません。
また、ローカル環境ではエラーは発生せず、
WEB経由の場合にエラーが発生しています。
プロクシは使用していないので、コード内で設定するとかはしていません。

恥ずかしながら、エラー原因の特定ができずどのような対処をしたらよいか、
まったくわかっておりません。。。
解決方法や対処法やエラー原因の特定法などなにかございましたら。
ご教授宜しくお願いします。

構成
WINDOWS XP
VB.NET
ASP.NET
IIS6.0
SQLSERVER2000
スマートクライアント

ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 2006-07-31 08:39
単純にタイムアウトを起こしているだけのような気が・・・

集計処理はストプロで作成されているのでしょうか?
その際のストプロの実行には、SqlCommandを使用してます?
そうであれば、CommandTimeoutプロパティの値を調べてみると
良いと思います。
※デフォルト値は30秒ですが、5分経過してエラーになったという事は
 300秒をセットしているのかも?
だんご虫
会議室デビュー日: 2006/07/30
投稿数: 18
投稿日時: 2006-07-31 10:07
梶様、回答ありがとうございます。
CommandTimeoutの設定値は600秒となっており、
これが原因ではないと思います。

Machine.configやIISのキープアライブの設定が疑わしいのでは?
(全然見当違いな事を言っていたら申し訳ありません)
と思うのですが、どのような設定を行えばいいのか解っておりません・・・
teto
ベテラン
会議室デビュー日: 2002/07/31
投稿数: 61
投稿日時: 2006-07-31 11:36
はじめまして。

クライアント側のタイムアウト設定はどうでしょうか?

R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-07-31 11:53
タイムアウトっぽいですね。
集計する項目をインデックスにすると、少し早くなりますよ。
だんご虫
会議室デビュー日: 2006/07/30
投稿数: 18
投稿日時: 2006-07-31 13:51
teto様
田中様
回答ありがとうございます。

>クライアント側のタイムアウト設定
とはIISのタイムアウト設定のことでしょうか?
IISのタイムアウト設定は、1800秒となっています。

>集計する項目をインデックスにする
現在は一時テーブルに集計結果をガンガン突っ込んでいます(INSERT)
一時テーブルにインデックスを張れば、早くなるという事でしょうか?
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2006-07-31 14:28
引用:

だんご虫さんの書き込み (2006-07-31 13:51) より:
>クライアント側のタイムアウト設定
とはIISのタイムアウト設定のことでしょうか?
IISのタイムアウト設定は、1800秒となっています。


IISは、普通、サーバですね。

引用:

>集計する項目をインデックスにする
現在は一時テーブルに集計結果をガンガン突っ込んでいます(INSERT)
一時テーブルにインデックスを張れば、早くなるという事でしょうか?


インデックスを作るのにコストがかかるから却って遅くなりますね。
(集計元のテーブルにインデックス作っておけば早くなるのでは?という事なのでは?)
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-07-31 14:37
一時テーブルだったんですね・・・^^;

引用:

だんご虫さんの書き込み (2006-07-30 21:39) より:

クライアントから集計処理(データ数は多くても10万件未満)を実行し、
サーバ側で処理が行われるのですが、
サーバ側でのSQLによる集計処理中に、5分程度経過した際に、


しかし、10万件未満の処理で5分はちょっと長い気がしますね・・・

冬寂さんの仰るとおり、一時テーブルでは、その都度インデックスを書き換える処理が追加されてしまうと思われるため、一時テーブルに吐き出す側のテーブルのインデックスや、クエリーの作り方などを再検討してみては如何でしょうか?

スキルアップ/キャリアアップ(JOB@IT)