过去两天我一直在圈子里跑来跑去,试图在客户的现场环境中解决问题。我想我也可以在这里发布,因为谷歌给了我关于错误信息的非常有限的信息(确切地说是5个结果)。
当使用某个参数时,在SSRS2005中请求某个报告时,错误会归结为超时。
部署方案是: 机器#1运行报告服务(SQL2005,W2K3,IIS6) Machine#2运行数据仓库数据库(SQL2005,W2K3),它是#1的数据源 两台计算机都在同一个vm集群和LAN上运行。
报告要求一个相当简单的SP - 让我们称之为sp(param $ a,param $ b)。 当param $ a请求填充时,它会正确执行。使用param $ b时,它会在全局超时周期过后超时。
如果我直接从#2的sql management studio运行param $ b的存储过程,它会很好地返回结果(在3-4s内)。
我在#2上描述了数据仓库数据库,当使用param $ b时,从报告服务到数据库的查询永远不会达到#2。
在使用param $ b时,我在超时时从SSRS Web界面直接调用报告时出现的错误消息是:
“报告处理期间发生错误。 无法读取数据集DataSet的下一个数据行。 当前命令发生严重错误。结果(如果有的话)应该被丢弃。用户取消了操作。“
除了错误消息rsProcessingAborted
之外,SSRS的ExecutionLog确实给了我很多信息我已经没有如何解决这个问题的想法了。所以我非常感谢任何意见,建议或想法。
提前致谢!
答案 0 :(得分:2)
您需要做的第一件事是确保您的统计信息是最新的。
(听起来好像parameter sniffing使用了错误的查询计划,如本答案所述:Parameter Sniffing (or Spoofing) in SQL Server)。
在SQL Server 2005中解决此问题的一种方法是使用OPTIMIZE FOR查询提示。另请参阅OPTIMIZE FOR query hint in SQL Server 2005
此外,您是否为部分或全部索引定期编制索引重建作业?