快速查询在SSRS中运行缓慢

use*_*554 76 performance report reportingservices-2005 reporting-services

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

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

use*_*554 104

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

  • 您可以将查询标记为OPTIMIZE FOR UNKNOWN,而不是重新分配所有变量.请参阅http://stackoverflow.com/questions/12979493/multi-tenant-sql-server-databases-and-parameter-sniffing (2认同)

小智 15

将其添加到proc的末尾: option(recompile)

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

  • 如果存在运行缓慢的单个查询,则在查询级别添加选项(重新编译)可能会产生很大的不同.请记住:重新编译=优化.如果您需要在非常短的时间内运行查询(例如,100毫秒或更短时间),则重新编译时间可能是不可接受的,绕过参数嗅探可能对您更有效.但是在需要几分钟才能完成的大型报告中,与具有错误查询计划的惩罚相比,重新编译的成本可以忽略不计. (6认同)

JHF*_*HFB 14

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

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

  • 感谢您分享这一点.我也在做非存储过程方法,这给我节省了很多时间. (3认同)

小智 11

我有同样的问题,这是我对问题的描述

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

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

解:

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


小智 5

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


小智 5

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


bub*_*uro 5

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

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

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


小智 5

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

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

在此处输入图片说明


Jon*_*onH 1

您可以做几件事,无需执行实际报告,只需从报告服务的数据选项卡中运行存储过程即可。还需要时间吗?另一种选择是使用 SQL Profiler 并确定进出数据库系统的内容。

您可以做另一件事来测试它,以便重新创建一个不带任何参数的简单报告。运行报告,看看是否有所不同。您的 RS 报告可能已损坏或格式错误,从而可能导致渲染速度非常慢。