快速查询在SSRS中运行缓慢
我有一个调用存储过程的SSRS报告。 如果我直接从查询窗口运行存储过程,它将在2秒内返回。 但是,从2005年SSRS报告运行相同的查询需要5分钟才能完成。 这不仅仅是第一次发生,每次都会发生。 另外,在其他环境中我看不到这个问题。
关于为什么SSRS报告在这个特定环境下运行如此缓慢的任何想法?
感谢您在这里提供的build议。 我们已经find了一个解决scheme,它确实涉及到参数。 由于“参数嗅探”,从SSRS报告执行时,SQL Server正在生成一个令人费解的执行计划。 解决方法是在存储过程中声明variables并将传入参数分配给variables。 然后查询使用variables而不是参数。 这使查询无论从SQL Serverpipe理器还是通过SSRS报告进行调用都一致执行。
将此添加到proc: option(recompile)
的末尾option(recompile)
这将使报表运行速度几乎与存储过程一样快
我将补充说,我有一个非存储过程查询相同的问题 – 只是一个普通的select语句。 为了解决这个问题,我在数据集SQL语句中声明了一个variables,并将其设置为等于SSRS参数。
多恼人的解决方法! 不过,谢谢大家接近我的答案!
我有同样的问题,这里是我对这个问题的描述
“我创build了一个可以生成2200行的存储过程,但是在从SSRS 2008调用存储过程并运行报告之后,它将在近2秒内执行,但实际上从未运行,最终我必须杀死BIDS(商业智能开发工作室)从任务pipe理器“。
我试过了:我试着从reportuserlogin运行SP,但是SP也正常运行,我检查了Profiler,但没有任何结果。
解:
其实问题是,即使SP正在生成结果,但SSRS引擎正在花费时间来读取这些许多行并将其渲染回来。 所以我在SP中添加了WITH RECOMPILE选项并运行了报告。这是奇迹发生的时候,我的问题得到了解决。
我有相同的情况发生..非常基本的报告,SP(只需要1参数)是花5秒钟带回10Klogging,但报告将需要6分钟运行。 根据profiler和RS ExecutionLogStorage表,报告花费了所有的时间在查询上。 Brian S.的评论让我想到了解决scheme。我只是在SP中的AS语句之前添加了WITH RECOMPILE,现在报告时间几乎与SP执行时间相匹配。
我只是取消选中“Tablix属性”中的“在每个页面上重复标题列”。
如果您的存储过程使用链接服务器或openquery ,它们可能会自行运行,但需要很长时间才能在SSRS中呈现。 一些一般的build议:
- 通过使用不同的数据源直接从存储数据的服务器检索数据,而不是使用链接的服务器检索数据。
- 在执行报表之前,将数据从远程服务器加载到本地表中,保持报表查询的简单性。
- 使用表variables首先从远程服务器检索数据,然后与本地表连接,而不是直接返回与链接服务器的连接。
我看到这个问题已经得到解答,我只是补充一点,以防有人遇到同样的问题。
报告检索32000行报告html输出麻烦。 查询运行速度很快,但输出到Web浏览器非常慢。 在我的情况下,我不得不激活“交互式分页”,让用户看到第一页,并能够生成Excel文件。 这个解决scheme的优点是第一页显示很快,用户可以生成导出到Excel或PDF,缺点是用户只能滚动当前页面。 如果用户想要看更多的内容,他必须使用网格上方的导航button。 在我的情况下用户接受这种行为,因为导出到Excel是更重要的。
要激活“交互式分页”,您必须单击报告窗格中的空闲区域,然后在“属性”窗格的报告级别中更改属性“InteractiveSize”\“高度”。 设置此属性不同于0.我设置为8.5英寸在我的情况。 还要确保在Tablix级别(右键单击Tablix,然后“Tablix属性”,然后“常规”\“分页选项”),取消选中“在一个页面上保留在一个页面上”属性。
我遇到了一个类似的问题,我的存储过程从Management Studio快速执行,但从SSRS执行速度非常慢。 经过漫长的斗争,我解决了这个问题,通过物理删除存储过程并重新创build它。 我不知道它背后的逻辑,但我认为这是因为存储过程中使用的表结构的变化。
我面临同样的问题。 对我来说,只是解开这个选项:
Tablix属性=>分页选项=>如果可能的话,保持在一个页面上
SSRS报告。 它试图把所有logging放在同一个页面上,而不是创build许多页面。
除了参数嗅探问题之外,我发现SSRS在客户端处理方面通常比在我的情况下Crystal报告慢。 当SSRS引擎有很多行进行本地过滤或聚合时,SSRS引擎似乎不具备这种能力。 当然,这些都是结果集devise问题,可以经常解决(虽然并不总是细节是需要深入研究的),但是更成熟的…报表引擎更加宽容。
你可以做的事情,而不是执行实际的报告,只是从报告服务的数据选项卡中运行存储过程。 这是否还需要时间? 另一个select是使用SQL事件探查器并确定进出数据库系统的内容。
另一件事你可以做testing,所以重新创build一个简单的报告没有任何参数。 运行报告,看看是否有所作为。 这可能是因为你的RS报告被破坏或者形成不好,可能会导致渲染速度非常慢。
有相同的问题,并通过给共享数据集默认参数并更新报表服务器中的数据集来解决此问题。
你在SSRS表中使用“group by”吗?
我收到了一个按字段分组的3个报告,我注意到,尽pipe有一个明确的查询,但是我甚至无法在search字段中拨号。
比我删除的分组,现在报告在几秒钟内上升,一切工作在一瞬间。
在我们的情况下,不需要代码。
从我们的服务台注意到:“清除您的Internet设置将解决此问题。”
也许这意味着“清除caching”。
在我的情况下,我只能通过从底部删除[&TotalPages]内置字段来解决它。 从几分钟降到不到一秒钟的时间。
奇怪的是,我不能确定是在总页面的计算有影响。
我正在使用SSRS 2012。
就我而言,我只需要断开并连接SSMS。 我分析了查询,执行的持续时间显示1分钟,即使查询本身在2秒钟内运行。 重新启动连接并再次运行,这段时间显示了正确的执行时间。