【发布时间】:2017-05-15 15:20:23
【问题描述】:
我正在使用 SSRS 2008 R2 和报表生成器 3.0。我有一个需要帮助的级联报告问题。第一份报告运行良好。单击报告中的链接会将@processID 参数传递给后续报告。
现在,当使用字符串而不是直接在 SSMS 中的参数运行查询时,它需要不到 1 秒的时间。当我使用参数通过 SSRS 运行它时,大约需要 15 分钟。我读过SSRS不能很好地处理参数。我想做的是找到一种方法将参数更改为字符串,然后发送它,或者如果有人知道更好的方法。
以下是报表正在运行的查询:
SELECT ResultDetail_View.processOid, ResultDetail_View.applicationId, outputItem.outputValue, ResultDetail_View.startTime, ResultDetail_View.resultStatus,
ResultDetail_View.statusMessage, ResultDetail_View.endTime, ResultDetail_View.ErrRec, COUNT(Summary.Id) AS SumRec
FROM ResultDetail_View LEFT OUTER JOIN
Summary ON ResultDetail_View.processOid = Summary.Id LEFT OUTER JOIN
outputItem ON ResultDetail_View.outputOid = outputItem.outputItemOid
GROUP BY ResultDetail_View.processOid, ResultDetail_View.applicationId, outputItem.outputValue, ResultDetail_View.startTime, ResultDetail_View.resultStatus,
ResultDetail_View.statusMessage, ResultDetail_View.endTime, ResultDetail_View.ErrRec
HAVING (ResultDetail_View.processOid = @processID)
ORDER BY ResultDetail_View.startTime
【问题讨论】:
-
您如何在报告中运行查询?它是存储过程吗?如果是这样,这看起来很像Parameter Sniffing,这将妨碍 SQL Server 选择最佳查询计划的能力。
-
不幸的是,这些是继承的报告。这些是临时格式,而不是存储过程。我发布的代码实际上是运行的数据集查询。我还没有找到参数嗅探。为了以防万一,我进行了重新编译,但在 SSRS 和 SSMS 中仍然花费了相同的时间。
-
您是否在 sql server 实例上运行过跟踪,以准确查看报表运行时服务器上正在执行的查询。一旦你有了它,如果你直接在同一台服务器上的 SSMS 中运行它,你应该得到完全相同的性能(无论是好是坏)。这不是答案,但至少应该可以帮助您调查问题。
标签: sql-server sql-server-2008 reporting-services ssrs-2008-r2