Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 Reporting Services的性能较慢,QueryAnalyser的速度非常快_Sql Server 2005_Reporting Services - Fatal编程技术网

Sql server 2005 Reporting Services的性能较慢,QueryAnalyser的速度非常快

Sql server 2005 Reporting Services的性能较慢,QueryAnalyser的速度非常快,sql-server-2005,reporting-services,Sql Server 2005,Reporting Services,我们正在使用SQL Server 2005和Reporting Services 我们有很多报告,每个报告都包含一个相对简单的SQL查询——我的意思是,我们确实有一些连接,但没有比这更糟糕的了。我们在查询中不调用任何存储过程-这不是参数嗅探的情况 当通过Reporting Services执行其中一个报告(我们称之为report A)时,需要非常长的时间才能完成—大约需要几十分钟甚至几个小时。在查询分析器中执行相应的SQL查询时,它会在几秒钟内完成 从数据库返回的行数可能只有1行,但报告永远不会

我们正在使用SQL Server 2005和Reporting Services

我们有很多报告,每个报告都包含一个相对简单的SQL查询——我的意思是,我们确实有一些连接,但没有比这更糟糕的了。我们在查询中不调用任何存储过程-这不是参数嗅探的情况

当通过Reporting Services执行其中一个报告(我们称之为report A)时,需要非常长的时间才能完成—大约需要几十分钟甚至几个小时。在查询分析器中执行相应的SQL查询时,它会在几秒钟内完成

从数据库返回的行数可能只有1行,但报告永远不会完成

其他报告运行良好

查看Reporting Services上的ExecutionLog表,我可以看到大部分时间都是在TimeDataRetrieval中(我们这里说的是数百万秒…),即报告实际完成的时间。如果手动中止报告,则TimeDataRetrieveal为零,而TimeProcessing则高得离谱

我查看了Reporting Services的日志,但一切看起来都很正常

现在,在您开始建议“lock”之前,我们的查询确实启用了nolock提示

就目前情况而言,我已经达到了想像力的极限,试图找出错误。任何想法、见解都将不胜感激


/Christoffer

运行报告时,请使用SQL探查器尝试共同捕获执行计划。如果您没有任何converu隐式运算符(例如,和通常的表/索引扫描),请查看

转换会阻止使用索引,如果传递的参数类型与比较它们的列不同,则可能会发生这种情况

您可以尝试将选项(重新编译)添加到报告的查询中,您的报告可能是错误的受害者


检查查询是否使用标量用户定义函数。他们可能是性能的真正杀手。如果您有这些语句,则可以将它们转换为。

我最终剥离了查询,基本上是一次剥离一条语句,直到找到了罪魁祸首。查询中的一个连接使用“with(nolock index(x))”提示连接到不断增长的表(数百万行)中

在查询分析器中删除索引提示得到了与Reporting Services中相同的结果—一个非常慢的查询。这本身并不奇怪——但实际上,在运行RS时,查询似乎没有使用提示

然后,我尝试使用SET-FORCEPLAN-ON语句再次在RS中运行报告。而且。。。它工作了-执行时间现在应该是几秒钟。据我所知,FORCEPLAN选项强制SQL Server按照指定的顺序处理连接,并考虑任何提示


当查询分析器显然考虑到这个提示时,是否有人知道为什么通过RS进行的查询会忽略这个提示?

快速更新:似乎任何执行时间超过30秒的查询都会自动导致Reporting Services超时。虽然SetForcePlan解决了部分报告的问题,但仍有问题报告会超时。尽管执行时间大于30秒,但这些查询在查询分析器中仍然可以正常工作。在消除了超时设置的所有其他可能问题之后(在SQL server、Reporting Services、rsserver.config和IIS中),我发现仍然存在无法修改的超时

我怀疑这与ADO.NET默认超时有关,而微软让我们无法修改这个值

最后,我对查询进行了更深入的研究,尽我所能重新安排了查询,并设法从执行时间中减少了几秒钟。现在,终于,报告正常运行了


但是,这种不可修改的超时令我担忧-如果执行查询时SQL server的负载高于正常负载,会发生什么情况?

我也遇到过同样的情况

在ManagementStudio中,结果在20秒后出现,但当我在VisualStudio中运行报告时,它锁定了系统

在SQL profiler中,我跟踪了查询,并意识到它将我的查询转换为:

    exec sp_executesql N'
                ....................
                ....................' 
, @dateparameter1 = '2010-06-01 00:00:00'
, @datepamareter2 = '2010-06-02 00:00:00'
, @stringparameter=null
我检查了执行计划,意识到我是参数嗅探的受害者


我已经按照要求重新组织了查询,现在运行良好。

这也发生在我身上,是参数嗅探。我使用了与过滤器相同的报表视图,只是使用了我想要的字段


我所做的是为过滤器创建一个视图,并解决了这个问题。

尝试使用SQL profiler查看从query Analyzer和Reporting Services传递相同查询时,接收到的查询是如何不同的,以及每个查询完成所需的时间。可能是参数解释导致Reporting Services出现问题吗?谢谢您的评论。我尝试使用SQL分析器。参数相当简单——两个日期和几个字符串。这些日期可能是主要的嫌疑犯,但它们似乎被解读为是可以的。在探查器中没有什么特别突出的地方,发送到SetSessionParameters的参数看起来还可以。我还应该补充一点,我可以在Visual Studio中直接执行报告,没有任何问题。问题仍然没有解决。我已尝试在不同的Reporting Services安装上安装该报表,结果相同。有什么建议吗?谢谢你的回答。我昨天自己也找到了答案,见下文。