- PR -

ADO.Netからのストアド実行処理が極端に遅い

投稿者投稿内容
ITAROU
会議室デビュー日: 2007/06/24
投稿数: 2
投稿日時: 2007-06-26 00:54
ハニワ祭り様、めだか様
レスありがとうございます。

----------
一時テーブルへのインサートが遅いのではなく、
一時テーブルへ挿入するためのデータの抽出が遅いのではないですか?
-----------
→おっしゃるとおりです。

ご指摘内容を参考に色々試してみたいと思います。
Dai
会議室デビュー日: 2007/05/24
投稿数: 12
投稿日時: 2007-07-02 17:04
ITAROUさん、出張に出ておりレス遅れましてすみません。

私のプロジェクトでは結局この件、以下の対応内容で速度改善できました。
ITAROUさんの環境でも以下対応を行ってみてはいかがでしょう??

---
■対応内容

クライアントプログラム内のストアド呼び出し部で、DB接続オープン直後、
接続設定 "SET ARITHABORT ON" を行う処理を追加。
コード:
SqlCommand command = new SqlCommand();
con.Open();
command.Connection = con;

//タイムアウトしない
command.CommandTimeout = 0;
//ARITHABORT
command.CommandText = "SET ARITHABORT ON";
command.ExecuteNonQuery();

//ストアド実行
command.CommandType = CommandType.StoredProcedure;
command.CommandText = strStoreProcedure;

if (objParamArray != null)
    command.Parameters.AddRange(objParamArray);

SqlDataReader reader = command.ExecuteReader();



■処理速度比較

・抽出データ1件
before : 約1時間
after : 約2秒

・抽出データ1100件
before : 約1時間
after : 約1分30秒

・条件なし、抽出データ89000件
before : 約1時間
after : 約2分

■参考

http://msdn2.microsoft.com/ja-jp/library/ms190306.aspx
http://msdn2.microsoft.com/ja-jp/library/ms175088.aspx
---

事情により、「何故この対応で速度改善できたのか」を深く突き詰める事が出来ず、
いまいち明確に原因は把握できていません。
その為、こちらへのレポートも遅れてしまい、すみませんでした。

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