- PR -

内部サーバーエラー(HTTP500)

1
投稿者投稿内容
かなめ
会議室デビュー日: 2002/07/15
投稿数: 16
お住まい・勤務地: 東京
投稿日時: 2002-08-09 18:45
いつもお世話になっております。かなめです。

現在、ASP.NETで開発しております。(言語:VB.NET)
開発しているものは、CSVファイルを読み込んでSQL Server2000に
登録する・・・といったものをやっています。

データ件数が100件程であるとうまくいくのですが、
1万件以上のデータに対しては途中で内部サーバーエラーになってしまいます。
しかも内部サーバーエラーの画面が表示されるのが、
実行後3分後の時もあれば30分後の時もあります。

プログラム内では、INSERT文100回投げる度にコミットを行っているので、
SQL Serverがオブジェクトが貯まって・・・ということは考えられないと思います。

内部サーバーエラーに関して色々調べたのですが、
原因がわからなくて困っております。
どなたかご存知の方、ご教授お願い致します。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-08-10 15:25
>内部サーバーエラーに関して色々調べたのですが、
>原因がわからなくて困っております。

ASPなどでよく出る、IISの内部サーバエラーは理由そのものがわかりにくく、どこが原因かはっきりしない困ったエラーです。

なので、推測なのですが、恐らくコードの問題やデータベースサーバの問題だというよりも一万件のデータの処理をブラウザー上で同期的に行うということ自体の問題ではないかと思われます。

例えば、ファイルのアップロードのシステムを作ったとしてですが、同じ5Mのファイルをアップロードするのに、ADSLユーザーであればきちんと実行が行われるのに、ISDNユーザーでは、内部サーバエラーとして返ってきてしまうというケースがあります。

これはHTTPの仕様上、TIMEOUTの問題も含めて、同期的な処理で30分も処理待ちを行えないからのようです。

同期的に行う回避策もあるかと思いますが、非同期な処理に切り替えるべきだと思われます。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
かなめ
会議室デビュー日: 2002/07/15
投稿数: 16
お住まい・勤務地: 東京
投稿日時: 2002-08-12 09:49
うりゅう様

返答ありがとうございます。

『非同期な処理に切り替える』と良いとのことですが、
具体的にどのような形をとるとASP.NETで非同期な処理になるのかわからないのですが、
教えていただけないでしょうか。
申し訳ありませんが、よろしくお願い致します。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-08-13 15:29
>『非同期な処理に切り替える』と良いとのことですが、
>具体的にどのような形をとるとASP.NETで非同期な処理になるのかわからないのですが、

えっと、非同期な処理にするということは、ブラウザーから何かしらのアクションをしたときにその返値を待たないということになります。いわゆるバッチ処理を動かすだけ動かして、その結果を待たないということになります。

今回の件では、直接ユーザーインターフェースを持っているASP.NETのADO.NETでSQLSERVERのインサートを行うのではなく、他の方法で行うということです。いろいろありますが例えば、以下のような方法論で可能だと思います。

・ストアドプロシージャを作成して、そのストアドプロシージャを呼び出す。
・別にそういったインサート処理を行うためのプログラムを作って、そのプログラムを呼び出すだけにする。って、これは全てにあてはまるか(苦笑)例えば、本当のバッチファイルを作ってそれを呼び出すだけにするとか、.NETでそういったプログラムを作るとか。

わかりにくいようでしたら、サンプルを漁ってみて、書き込みます。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
かなめ
会議室デビュー日: 2002/07/15
投稿数: 16
お住まい・勤務地: 東京
投稿日時: 2002-08-14 10:56
うりゅう様
返答ありがとうございました。

最初、ストアドプロシージャを作成しようと思っていたのですが、
『csvファイルを読み込んで、SQL ServerにINSERT・・・』という方法がわからずに
断念してしまいました。

その後、VS.NETのヘルプで非同期について調べてみました。
(出来れば、.NETでプログラムを作りたかったので・・・)
非同期については色々とヘルプがあったのですが、難しくてよくわからなくて・・・。
もう少し教えていただけると嬉しいです。
よろしくお願い致します。
じゅんのすけ
会議室デビュー日: 2002/08/14
投稿数: 2
投稿日時: 2002-08-14 17:11
CSVからテーブルにINSERTするのであればBULK INSERTが使えると思いますが。

ほかにはDTS(データ変換サービス)パッケージを作成しておいて、COM経由で呼び出すとか・・・
かなめ
会議室デビュー日: 2002/07/15
投稿数: 16
お住まい・勤務地: 東京
投稿日時: 2002-08-19 11:24
自己レスです。

非同期のプログラムを作成してやってみました。
見た目上は、内部サーバーエラーの画面も表示されずうまく動いているようで
ホッとしました。
しかし、ログをとってみたところやはり途中で中断してしまいました。

サーバーのイベントビューアでエラーを確認したところ、
イベントソース1.00,375.0のログが残っていました。
(デッドロック状態である可能性があるため〜)
調べたところ、.NETFrameworkのSP2で対応済みとのことでしたが、
やはり駄目でした。

結局、machine.configのProcessModelのresponseDeadlockIntervalを
変更して対応してしまいました。
IIS6.0では使用できないとの事ですが、とりあえずはこれで対処したいと思っております。

皆様のアドバイスありがとうございました。
1

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