为什么Reporting Services报告比查询慢得多?

问题描述:

我有一个需要大约2分钟才能运行的查询。它在参数或任何方面都不是非常复杂,报告本身并没有进行任何真正广泛的处理。基本上只是以一种很好的格式直接输出数据。 (实际上其中一个报告根本不格式化数据,只是返回一个意图在excel中操作的扁平表。)为什么Reporting Services报告比查询慢得多?

它不返回大量数据集。

然而,报告需要30分钟的时间才能运行。

这是什么原因造成的?

这是针对SQL 2005数据库的SSRS 2005 btw。

编辑:好的,我发现在报告中加入WITH(NOLOCK)与查询通过SSMS所花费的时间相同。如果来自报告服务(或本地计算机上的visual studio)的查询处理方式与从本地计算机上的SSMS来的查询处理方式相同,为什么它们的处理方式会有所不同?我看到在活动监视器中运行SLEEP_WAIT模式几次查询,但不被任何东西阻挡...

EDIT2:连接字符串是:

数据源=服务器;初始目录=数据库名

+0

只是怀疑,但我怀疑数据源/ ado.net“驱动程序”是问题。我对此有任何其他评论以及我有类似的经历感兴趣。 – Mozy 2010-03-03 23:32:40

+0

您的连接字符串在报表上的数据源的外观如何? – 2010-03-05 14:03:03

+1

可能相关? http://stackoverflow.com/questions/2283943/fast-query-runs-slow-in-ssrs虽然你的NOLOCK经验可能不建议。 – 2013-08-12 04:58:17

查询需要很长时间才能运行,或者服务器处理速度慢?一些报告多次调用查询。例如,如果在一个分页列表控件的内部有一个子报表,则该报表的每个页面都会分别调用该查询。那么也许报告中的数据会造成延迟?

+0

该报告只会调用一次查询......并且正如我所说的那样,报告不会对数据做很多处理。一旦我添加WITH NOLOCK查询报告在2分钟内运行... – CodeRedick 2010-03-05 17:21:24

查询返回的数据集有多大?如果报告服务器的大部分时间非常大,则可能与报告呈现所花费的时间有关。要确定您可以查看报表服务器上的ExecutionLog表,以查看TimeRendering与总体执行时间相比是否是一个大数字。

+0

不是那么大,除了NOLOCK为什么会影响报告的速度呢? – CodeRedick 2010-03-26 14:33:37

我认为这并不罕见,但我们研究了类似的问题。

从内存来看,我们注意到的一件事是我们的子报表有参数,我们已经配置了从数据库查询的“可能的值”。

我认为每次运行子报表时,SSRS都会重新查询参数的可能值(即使您不使用结果,您的报表中也会运行其他任何查询(&))。

在这种情况下,一旦我们满意,子报表工作正常,我们移除了查询参数值并允许“任何值”的查询,假设父报表不会给我们提供不良参数值。