2016-08-02 82 views
1

我在SQL Server中遇到了一個問題,在這個SQL Server中,存儲過程在幾天後變得很慢。存儲過程每隔幾天就會變慢

下面是我的存儲過程的示例。

這可能是服務器端的緩存問題嗎?我可以增加服務器的緩存大小來解決問題嗎?

通常,存儲過程在一秒內返回數據。

@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-當它變慢時,嗅探或者哄騙sql-server – sgeddes

+0

@sgeddes,它對於特定的輸入只會變慢。對於一些輸入來說,它的工作速度更快。 – Hemal

+0

儘量避免#temp,結果較大意味着執行速度慢,找到解決辦法 –

回答

0

一些性能提示:

1)@UID爲空或dbo.TABLE1.ID = @UID - >這是不好的,因爲你有一個執行計劃的時候UID是零和當它不是。建立一個動態的SQL查詢,你會得到2個執行計劃。

2)更新維護計劃中的統計數據。

3)檢查索引碎片。

4)嘗試做同樣的事情,而不使用臨時表。

5)儘量避免鑄件。