2017-12-01 13 views
-1

私はそれが値を合計して、レコードをカウント数を選択する以外の何ものでもありませんSQL Serverの2016ストアドプロシージャは実行されているが、修正を再コンパイルを停止し、それ

で1日に数回を実行するストアドプロシージャを持っています。出力パラメータとして値を返します。

毎回、たぶん2ヶ月に1回、それはちょうど仕事を止めるでしょう。私はコード(C#)からifを呼び出すときにタイムアウトの問題が発生することになります。

通常、1秒未満で実行されます。私がそれを再コンパイルすると、すべてが正常に戻り、数ヶ月間別の問題は発生しません。

これを引き起こす原因は何ですか?

問題の発見に役立つ追加情報はありますか?ここで

は、クエリのいずれかのサンプルです:

サンプルクエリやコメントでの議論、私はこれがスニッフィングパラメータに関係しているかなり確信していると、データの偏りに基づいて、最適計画に基づき
  SET ANSI_NULLS ON 
    ALTER PROCEDURE [dbo].[spName] 
     @dateFrom as datetime, 
     @dateTo as datetime, 
     @CustID as varchar(50) 
    AS 
    BEGIN 
     SET NOCOUNT ON; 

     declare @TotalReturns as decimal(12,0), 
       @TotalReturnsValue as decimal(12,2), 

     --Total Transactions and Value for returns within date range 
     --********************************************************** 
     select @TotalReturns = count(*), @TotalReturnsValue = sum(cast(isnull([amountField],'0') as decimal(12,2))) 
     from [tableName] 
     where [customerField][email protected] 
      and [returnDateField] between @dateFrom and @dateTo 
      and replace([amountField],' ', '') != '' 
     --********************************************************** 

     --Outputs 
     select isnull(@TotalReturns,0) as TotalReturns, 
      isnull(@TotalReturnsValue,0) as TotalReturnsValue  
    END 
+0

完全なエラーの詳細、またはコードに問題があるときに含める必要がある通常の事情を考慮して、適切なコードを表示していません。 – mason

+0

dbaがprodからdevを更新するときにOracleストアドプロシージャでこの問題が発生していると聞いたことがありますが、SQL Serverには含まれていません...あなたがどこにいるのかDBAに問い合わせることができます – MethodMan

+0

ロックのような音がタイムアウトの原因ですそのSPが実行されているときに同じターゲットテーブルで実行されている他のクエリはありません – LONG

答えて

2

クライアントと日付範囲を超えてパラメータスニッフィングについてはここで詳しく読むことができます。 https://www.sqlinthewild.co.za/index.php/2007/11/27/parameter-sniffing/。 Gailは、これとパフォーマンスの課題とそれに対処するためのいくつかの方法を説明する素晴らしい仕事をしています。

関連する問題