2009-05-28 5 views
0

SQL ServerのストアドプロシージャはSQL Managerで直接実行され、かなり大きな計算が実行されますが、実行には最大50〜10秒しかかかりません。.NETデータアダプタのタイムアウトSPの問題

しかし、これを.NETアプリケーションからデータアダプタ経由で呼び出すと、タイムアウトになります。ただし、タイムアウト時間の前にタイムアウトが発生する場合は、60秒に設定し、約20秒以内にタイムアウトします。

私はこの問題を巡回し、他の人がSPが直接動作しているが、データ・アドレタ呼び出しでは遅い問題を指摘しています。

これを解決する方法についてのご意見はありますか?

+0

あなたは* *タイムアウトを設定していると、それはその区間の前にタイムアウトだ場合のタイムアウトプロパティは、それが聞こえます。 *私たち*コードを表示してください。 – JohnIdol

答えて

0

SSMSで正常に動作すると言えば、ストアドプロシージャ自体の実行が正常に実行されたか、基本となるSQLが正常に動作しているということですか?

あなたの説明から、これはパラメータスニッフィングの例のように聞こえます。基本的に、SQL Serverは1つのパラメータセットに最適な実行計画をキャッシュしていますが、他のほとんどのパラメータでは例外的に劣っています。

ストアドプロシージャのクエリでRECOMPILEオプションを使用すると、実行ごとに強制的に再コンパイルすることができます。これが頻繁に呼び出されない場合、またはコンパイルに時間がかからない場合は、this trickを使用できます。

もう1つの解決方法は、ストアドプロシージャのパラメータをローカル変数にコピーし、クエリ内のパラメータを使用することです。例:

CREATE PROCEDURE my_proc 
    @var1 INT 
AS 
    DECLARE @_var1 AS INT; 
    SET @_var1 = @var1; 

    SELECT col1, col2, col3 
    FROM t1 
    WHERE t1.pk = @_var1; 
+0

SMSSでは、SPは.NETデータアダプタ経由でparams jsutを渡すことで、試行するたびに正常に動作します。しかし、SPを強制的に再コンパイルするとNET側でしばらく働いているように見えるので、たぶんおそらくキャッシュ問題を計画しているかもしれません。何とかデータアダプターや.NETが見えてくるようです。 –

0

すべてのタイムアウトを確認してください。あなたがasp.netやリサイズを使用している場合、私は知らないが、このリストの少なくとも最初の2が適用されます:チェックする
Time out period not elapsed, but still timing out (see code)?

もう一つは、あなたが正しくあなたのパラメータを設定していることです。間違っているとインデックスが壊れる可能性があります。私がこれを見たのは、クエリのキーとなるvarcharカラムのインデックスがあり、そのカラムのパラメータを明示的な "AddWithValue()"や明示的に設定しない他の関数を使って設定したときですタイプ。 .Netは、.Netの文字列がUnicodeなので、nvarcharパラメータをデフォルトで提供します。その結果、索引を使用できなくなります。あなたが設定していない他のいくつかのタイムアウトがありますlieke

+0

Winformsアプリ また、SQLではowenks fienですが、datadapter経由で呼び出された場合は無効になります。その上に非常に矛盾しているように見えますが、時にはそれがうまくいくこともあります。私はなぜこの時点で迷子になったのですか? –

+0

.Netコードで実行計画を取り戻すことができます。それはあなたに何かを伝えるかもしれません。 http://www.eggheadcafe.com/community/aspnet/2/55237/thanks-guysi-got-the-res.aspx –

0

変更SqlConnectionオブジェクト