我有一个缓慢加载的SSRS报告,可能是因为锁定错误。这就是我所知道的。
如果我将驱动报告的查询放入Management Studio查询窗口,则运行大约需要50毫秒。
当我运行报告标准时,我已经从浏览器界面进行测试,来自ReportServer..ExecutionLog(WHERE Status =' rsSuccess' AND ReportID = [thereport])的时间值范围如下:
TimeDataRetrieval: 95000-120000
TimeProcessing: 35000-50000
TimeRendering: 75-125
因为我不知道更好的方法,所以我监视了sys.dm_exec_requests,因为我运行了几次报告,这个查询似乎是挂断:
CREATE PROCEDURE [dbo].[CheckSessionLock]
@SessionID as varchar(32) AS
DECLARE @Selected nvarchar(32)
SELECT @Selected=SessionID
FROM [ReportServerTempDB].dbo.SessionLock
WITH (ROWLOCK) WHERE SessionID = @SessionID
看起来这个命令花费的时间与上面的TimeDataRetrieval + TimeProcessing值相同,所以我相信它是罪魁祸首。我也发现它做了类似的CleanOrphanedSnapshots创建,所以我想这是正常的SSRS操作。到目前为止,我还没有在报表生成器或代码本身中找到相关的配置设置。
我在网上发现的建议解决方案与参数嗅探有关"和WITH(nolock)。前者似乎只是在调用存储过程的上下文中,这是没有做到的。我创建了一个SP来查看抢占参数的处理是否会改变结果并且看起来是相同的。我已经添加了WITH(nolock)提示,并将隔离设置为uncommitted而没有运气。
我确定我错过了一些简单的事情。这里希望有人知道它是什么。谢谢你的帮助。
参数嗅探 - Fast query runs slow in SSRS Nolock方法 - SSRS is locking table
答案 0 :(得分:2)
根据上面Martin Smith的评论请求,这个特定问题的答案是认识到问题报告中运行的子报告本身导致了缓慢。简单地回顾一下在SSMS中运行的查询,这一点并不明显。所以要比我更敏锐,并确保你知道报告的完整构成。 :)