【发布时间】:2016-08-02 12:56:14
【问题描述】:
我在 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
'
【问题讨论】:
-
调试性能可能是一个挑战。当它变慢时,它会保持缓慢还是只是针对特定查询运行缓慢?
execution plan可能从传入的参数中缓存了一个糟糕的计划。看看parameter sniffing上的这个帖子——它可能会有所帮助:stackoverflow.com/questions/211355/… -
@sgeddes 当它变慢时,它仅对特定输入变慢。对于某些输入,它的工作速度更快。
-
尽量避免#temp,大结果意味着,执行慢,想办法解决它
-
请发布更小输入和更快输入的执行计划
-
虽然我通常会避免这种情况,因为它每次都会重新创建查询计划,但有时我别无选择。看看这个帖子:stackoverflow.com/questions/20864934/…
标签: sql sql-server database stored-procedures