tet*_*tch 5 locking sql-server-2008 reporting-services
我有一个缓慢加载的SSRS报告,可能是因为锁定错误.这就是我所知道的.
如果我将驱动报表的查询放入Management Studio查询窗口,则运行大约需要50毫秒.
运行我一直在浏览器界面测试的报告条件时,ReportServer..ExecutionLog(WHERE Status ='rsSuccess'和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而没有运气.
我确定我错过了一些简单的事情.这里希望有人知道它是什么.谢谢你的帮助.
根据上面马丁·史密斯的评论请求,这个特定问题的答案是认识到问题报告中运行的子报告本身导致了速度缓慢。仅通过查看 SSMS 中运行的查询就可以看出这一点。因此,请比我更加细心,并确保您了解报告的完整内容。:)