快速查询在 SSRS 2 中运行缓慢

Fast query runs slow in SSRS 2

这基本上是与 "Fast query runs slow in SSRS" 相同的问题,但是我看不出其中对我有用。

上下文: 创建了一个 Report Builder 数据集以用于我的报告,查询是:

SELECT  DISTINCT A.A
,   A.B
,   A.C
,   A.A + ', (' + A.B + '), : ' + CAST(A.C AS VARCHAR) D
FROM Table1 X
INNER JOIN TableA A ON X.Key = A.Key
WHERE (X.Col1 IN (@Param1))
AND (X.Col2 IN (@Param2))
UNION
SELECT '(All)', '(Select to apply all)', 0, '<APPLY ALL>'
ORDER BY C, A
OPTION (OPTIMIZE FOR UNKNOWN)

我有 3 个多值参数。第一个 (@Param1) 和第二个 (@Param2) 列出加载正常,第二个不依赖于第一个。使用上述数据集的第三个列表依赖于 1 和 2,正如您从上面的查询中看到的那样。

我添加了 OPTION (OPTIMIZE FOR UNKNOWN) 子句以尝试加快速度但无济于事。我什至不知道如何声明多值参数,所以这是我在这个阶段尝试的唯一选择。

在我完成 select 我的第二个 dropdown/parameter 的值并移动到第三个参数后,报告加载图标的东西搅动了大约 5 秒,然后它就停止了,之后没有任何反应,并且我从来没有从我的第三个下拉列表中到达 select 除非我准备等到它完成,但这似乎是大约 20 分钟,所以过了一会儿我就关闭了网页并重新开始。当我 运行 在 SQL 服务器中 运行 秒内查询报告时,当我 运行 通过 Report Builder IDE 中的报告时,它工作正常与 20 分钟相比有几秒钟的延迟,但是 运行通过 SharePoint/SSRS 需要 20 分钟。

有没有人有尝试的建议?

我发现我自己的解决方案更多是偶然而不是巧妙的想法,这纯粹是代表我的一个错误,很抱歉浪费任何人的时间,但它仍然让我有点困惑,或者生气是更好的描述方式.

显然,我提高性能的尝试之一还包括缓存一周左右之前完成的数据集。我已经 "Cache shared dataset" 打开了一个特定的每日时间表但是没有 "Cache Refresh Plan" 如果这有什么不同 - 可能是因为它可能仍在使用缓存版本,即也许改变数据集实际上并没有强制在报告的下拉列表中加载数据时自动刷新。因此,在设置缓存后更新我的查询的过程中,我从直接 sql 到多语句 table 值函数(使用 Option optimize for unknown)然后到存储过程调用了我的函数。因此,在更新数据集中的查询并刷新由于缓存而使用数据集的报告后,它可能没有应用我的最新更改。我关闭了缓存,然后我的报告第三个参数 (Dropdown) 开始响应。在 SharePoint 中 运行 时仍然相当慢,而在报表生成器中 IDE 它是瞬时的,但是下降到大约 10 秒而不是无限长的时间。所以我剩下的问题是使用存储过程实际上有效或者我在查询中使用了选项以及是否缓存是否缓存如果它会导致一个不明显的问题,即不会刷新直到下一个预定的时间段,我不确定 "Cache Refresh Plan" 是否会有任何不同。更重要的是,为什么 运行 通过 SharePoint 向 MS Server Management Studio 进行的查询要复杂得多,我确信如果我编写自己的自定义网页来调用相同的查询,它也将是即时的 -无论如何,如果我能被打扰的话,我可以回去试验一下。

显然,数据会随着时间的推移而变化,并且类似于本网站上另一个 post 的报告工作正常,然后突然变得无响应,无论如何它现在工作得很好,不需要缓存。