2016-08-02 8 views
1

私はストアドプロシージャが2,3日後に遅くなるSQL Serverの問題に直面しています。ストアドプロシージャは数日おきに遅くなります

以下は私のストアドプロシージャのサンプルです。

これはサーバー側のキャッシュの問題でしょうか?問題を解決するためにサーバーのキャッシュサイズを増やすことはできますか?

通常、ストアドプロシージャはデータを1秒で返します。

@START_VALUE int=null, 
    @END_VALUE int=null 
    @UID NVARCHAR(MAX)=null, 
    AS 
    BEGIN 

    SELECT 
    dbo.TABLE1.ID, 
    ROW_NUMBER() OVER (ORDER BY TABLE1.UPDATED_ON desc) AS RN, 
    CONVERT(VARCHAR(10), dbo.TABLE1.DATE, 101) AS TDATE, 
    CATEGORY = (
      SELECT TOP 1 COLUMN1 
      FROM TABLE5 CT1 
      WHERE TABLE1.CATEGORY = CT1.CATEGORY_ID 
     ), 
    TYPETEXT = (
      SELECT TOP 1 COLUMN1 
      FROM TABLE6 CT1 
      WHERE TABLE1.TYPE = CT1.TYPE_ID 
     ), 
    IMAGE = STUFF((SELECT DISTINCT ',' + CAST(pm.C1 AS varchar(12)) 
        FROM TABLE2 pm 
        WHERE pm.ID = TABLE1.ID AND pm.C1 IS NOT NULL AND pm.C1 <> '' 
        FOR XML PATH('')), 
        1, 1, '') INTO #tempRecords  
    FROM dbo.TABLE1 
    WHERE ((@UID is null OR dbo.TABLE1.ID = @UID) 
    ORDER BY TABLE1.UPDATED DESC  

    SELECT @count = COUNT(*) FROM #tempRecords; 

    SELECT *, CONVERT([int],@count) AS 'TOTAL_RECORDS' 
    FROM #tempRecords 
    WHERE #tempRecords.RN BETWEEN CONVERT([bigint], @START_VALUE) AND CONVERT([bigint], @END_VALUE)  

END 

GO 
' 
+0

パフォーマンスのデバッグが難しい場合があります。それが遅くなると、遅くなったり、特定のクエリに対して遅く実行されたりしますか? '実行計画'は、渡されるパラメータから悪い計画をキャッシュすることができます。 'パラメータスニッフィング 'に関するこの投稿を見てください - それは参考になるかもしれません:http://stackoverflow.com/questions/211355/parameter- sniffing-or-spoofing-in-sql-server – sgeddes

+0

@sgeddesが遅くなると、特定の入力に対してのみ遅くなります。いくつかの入力ではより速く動作します。 – Hemal

+0

#tempを避けるようにしてください。大きな結果を意味し、実行が遅く、回避策を見つけることがあります。 –

答えて

0

いくつかのパフォーマンスのヒント:

1)@UIDがnullであるかdbo.TABLE1.ID = @UID - > UIDがnullのときに1つの実行計画を持っていますので、これは悪いですし、そうでないときは。動的なSQLクエリを作成すると、2つの実行計画が得られます。

2)メンテナンス計画の統計情報を更新します。

3)インデックスの断片化をチェックします。

4)テンポラリテーブルを使用せずに同じことを実行してください。

5)鋳物を避けるようにしてください。

関連する問題