我有一个加载缓慢的 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) 提示,并将隔离设置为读取未提交但没有运气。
我确定我错过了一些简单的东西。这里希望有人知道它是什么。谢谢你的帮助。
参数嗅探 -快速查询在 SSRS Nolock 方法中运行缓慢 - SSRS 正在锁定表