【发布时间】:2013-11-05 00:51:38
【问题描述】:
有几个报告停止工作,我收到错误消息“现有连接被远程主机强行关闭”。当我尝试查看报告时,它们将永远运行,并且在事件日志中出现了几个超时错误......所以我猜我是由于超时而收到该错误。
现在的问题是找出报告运行如此缓慢的原因。我已经更改了 proc 以防止参数嗅探......但基本上:
通过 SSMS 运行 proc:1:42 通过报表服务器运行报表:6:45 通过 ASP.NET ReportViewer 控件运行报表:13:00 分钟
所以对我来说真正的谜团是为什么通过 ReportViewer 控件的速度是通过 SSRS 本身的两倍? (我可以稍后处理报告比 proc 慢...)
编辑:
按照 cmets 中的建议运行一些分析。从报告本身调用存储过程时,该存储过程以正常速度(55 秒)运行。所以问题要么是 SSRS 服务器,要么是 ReportViewer 控件……要么是 ReportViewer 和 SSRS 服务器之间的网络。
此外,如果我在我的台式电脑上(通过 VPN)在 Visual Studio 中运行报告,它工作得很好。
此外,还有一些其他较短的报告运行良好。想知道是否只是他们提取的数据少得多。
我注意到的最后一件事是,当通过 ReportViewer 控件运行时,查询似乎运行了多次。
再次编辑:
查看了 ExecutionLog 表,时间肯定是要渲染报告了。获取数据的时间非常一致。此外,生产服务器上的渲染时间比测试服务器长 6 分钟(甚至对生产数据库运行查询),所以这肯定是 Reporting Services 的问题。
【问题讨论】:
-
ReportViewer 设置为本地还是远程处理模式?
-
远程处理模式...
-
您确定存储过程是瓶颈 - 您是否运行了跟踪?另外,您对参数嗅探做了什么 - 您是否添加了 WITH RECOMPILE?
-
我不认为 proc 是瓶颈,它很慢,但报告时间加倍,而 ReportViewer 又加倍。我将参数复制到局部变量中以进行参数嗅探。没有使用重新编译。不确定我会做什么追踪...?
-
在进行更改后,我确实在 proc 上运行了 sp_recompile...
标签: asp.net reporting-services ssrs-2008