快速查询在SSRS中运行缓慢

时间:2010-02-17 19:55:31

标签: performance reporting-services report reportingservices-2005

我有一个SSRS报告,它调用存储过程。如果我直接从查询窗口运行存储过程,它将在2秒内返回。但是,从2005 SSRS报告运行的同一查询最多需要5分钟才能完成。这不仅仅发生在第一次运行,它每次都会发生。另外,我在其他环境中没有看到同样的问题。

关于为什么SSRS报告在这种特定环境中会如此缓慢地运行的任何想法?

16 个答案:

答案 0 :(得分:99)

感谢您提供的建议。我们找到了一个解决方案,结果确实与参数有关。由于“参数嗅探”,SQL Server在从SSRS报告执行时产生了一个复杂的执行计划。解决方法是在存储过程内部声明变量,并将传入参数分配给变量。然后查询使用变量而不是参数。这导致查询始终执行,无论是从SQL Server管理器还是通过SSRS报告调用。

答案 1 :(得分:14)

将此添加到您的过程结束时:option(recompile)

这将使报告的运行速度几乎与存储过程一样快

答案 2 :(得分:14)

我将补充说,我对非存储过程查询有同样的问题 - 只是一个普通的select语句。为了解决这个问题,我在数据集SQL语句中声明了一个变量,并将其设置为等于SSRS参数。

多么烦人的解决方法!不过,谢谢大家让我接近答案!

答案 3 :(得分:11)

我遇到了同样的问题,这是我对问题的描述

“我创建了一个存储过程,它将生成2200行并且将在近2秒内执行但是在从SSRS 2008调用存储过程并运行报告后它实际上从未运行过,最终我必须杀死BIDS(商业智能)开发工作室)来自任务经理“。

我尝试了什么:我尝试从reportuser登录运行SP,但SP也为该用户运行正常,我检查了Profiler但没有任何结果。

解决方案:

实际上问题在于,即使SP正在生成结果,但SSRS引擎需要时间来读取这些行并将其渲染回来。 所以我在SP中添加了WITH RECOMPILE选项并运行报告..这是奇迹发生时我的问题得到了解决。

答案 4 :(得分:5)

我有相同的情况发生。非常基本的报告,SP(只需要1个参数)需要5秒才能恢复10K记录,但报告需要6分钟才能运行。根据分析器和RS ExecutionLogStorage表,该报告花费了所有时间在查询上。 Brian S.的评论让我得到了解决方案。我只是在SP中的AS语句之前添加了WITH RECOMPILE,现在报告时间几乎与SP执行时间相匹配。

答案 5 :(得分:5)

我只是在Tablix属性中取消选择“在每个页面上重复标题列”。

答案 6 :(得分:5)

如果您的存储过程使用链接服务器 openquery ,它们可能会自行运行,但需要很长时间才能在SSRS中呈现。一些一般性的建议:

  • 使用不同的数据源直接从存储数据的服务器检索数据,而不是使用链接的服务器来检索数据。
  • 在执行报告之前将数据从远程服务器加载到本地表,使报告查询保持简单。
  • 使用表变量首先从远程服务器检索数据,然后与本地表连接,而不是直接返回与链接服务器的连接。

我看到问题已经得到解答,我只是添加了这个问题,以防有人遇到同样的问题。

答案 7 :(得分:4)

我遇到了类似的问题,我的存储过程从Management Studio快速执行但从SSRS执行速度非常慢。经过长时间的努力,我通过物理删除存储过程并重新创建它来解决了这个问题。我不确定它背后的逻辑,但我认为这是因为存储过程中使用的表结构的变化。

答案 8 :(得分:4)

报告检索32000行时报告html输出有问题。查询运行速度很快,但输出到Web浏览器的速度非常慢。在我的情况下,我必须激活“交互式寻呼”,以允许用户查看第一页,并能够生成Excel文件。此解决方案的优点是第一页显示速度快,用户可以生成导出到Excel或PDF,缺点是用户只能滚动当前页面。如果用户想要查看更多内容,他必须使用网格上方的导航按钮。在我的情况下,用户接受了这种行为,因为导出到Excel更重要。

要激活“交互式分页”,您必须单击报告窗格中的空闲区域,然后在“属性”窗格的报告级别更改属性“InteractiveSize”\“Height”。将此属性设置为不同于0.在我的情况下,我设置为8.5英寸。还要确保在Tablix级别取消选中“尽可能保持在一个页面上”属性(右键单击Tablix,然后单击“Tablix属性”,再选择“常规”\“分页符选项”)。

enter image description here

答案 9 :(得分:3)

我面临同样的问题。对我来说,只是解开选项:

  

Tablix属性=>分页选项=>尽可能在一页上保持一致

SSRS报告。它试图将所有记录放在同一页面上,而不是创建许多页面。

答案 10 :(得分:3)

除了参数嗅探问题,我发现SSRS在客户端处理时通常比(在我的情况下)Crystal报告慢。当SSRS引擎有很多行进行本地过滤或聚合时,它似乎不具备能力。当然,这些是结果集设计问题,这些问题可以经常得到解决(尽管并非总是如果需要详细信息才能进行深入研究),但更多...成熟......报告引擎更加宽容。

答案 11 :(得分:1)

您可以执行的一些操作,而不执行实际报告,只需从报告服务的数据选项卡中运行sproc。还需要时间吗? 另一个选择是使用SQL事件探查器并确定进出数据库系统的内容。

您可以执行另一项测试,以便重新创建一个没有任何参数的简单报表。运行报告,看看它是否有所作为。可能是您的RS报告已损坏或格式错误,可能导致渲染速度非常慢。

答案 12 :(得分:1)

遇到同样的问题,并通过为共享数据集提供默认参数并在报告服务器中更新该数据集来修复它。

答案 13 :(得分:1)

你在SSRS表中使用“group by”吗?

我的报告中有3个按字段分组,我注意到尽管有轻微的查询,报告仍然很慢,但我甚至无法在搜索字段中拨打值。

我删除了分组,现在报告在几秒钟内就会上升,一切都会立即生效。

答案 14 :(得分:1)

在我的情况下,我只能通过从底部删除[& TotalPages]内置字段来解决它。从几分钟到不到一秒的时间。

我无法确定的奇怪的事情是对总页数的计算有影响。

我使用的是SSRS 2012。

答案 15 :(得分:0)

在我们的例子中,不需要代码。

请联系我们的帮助台:“清除Internet设置将解决此问题。”

也许这意味着“清除缓存。”