sql-server-2005 - Reporting Services 的性能很慢,在 QueryAnalyser 中非常快

标签 sql-server-2005 reporting-services

我们将 SQL Server 2005 与 Reporting Services 结合使用。

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

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

从数据库返回的行数可以少至 1 - 然而,报告永远不会完成。

其他报告工作正常。

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

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

现在,在您开始建议“锁定”之前 - 好吧,我们的查询确实打开了 nolock 提示。

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

/克里斯托弗

最佳答案

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

删除查询分析器中的索引提示得到与 Reporting Services 中相同的结果 - a 非常慢查询。这本身并不奇怪 - 但确实看起来好像通过 RS 运行时的查询没有使用提示。

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

当查询分析器显然将其考虑在内时,是否有人对为什么通过 RS 的查询会忽略该提示有任何见解?

关于sql-server-2005 - Reporting Services 的性能很慢,在 QueryAnalyser 中非常快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117492/

相关文章:

.net - 为用户创建数据库沙箱/测试区域以运行假设场景

sql - 存储过程中的输出参数不起作用

reporting-services - 如何更改 ssrs 报告中的字符串颜色

visual-studio - 为什么我从 xsd 实用程序得到 "Error: ' .', hexadecimal value 0x00, is an invalid character. Line 2, position 1."

sql - 如何使用 SQL 创建多个存储过程

sql - MS SQL 2005 中神秘的 CPU 事件

sql - 回滚完整数据库一小时

reporting-services - SSRS 2008 R2 Globals!RenderFormat 导出方法

sql-server - SSRS多种数据源

mysql - Report Builder 3.0 前向依赖报告参数