【问题标题】:SQL SSRS Dataset hangs for single user单个用户的 SQL SSRS 数据集挂起
【发布时间】:2021-09-17 10:37:53
【问题描述】:

我们有一个运行简单存储过程的 SSRS 报告,其中传递了 2 个单值参数。 SSRS 报告和在 SSMS 中执行的存储过程都在

【问题讨论】:

  • 使用 OPTION(RECOMPILE) 进行测试。如果它有效,则您有参数嗅探问题。此外,如果您的参数是文本,SSRS 使用 NVARCHAR。如果您的列是 VARCHAR,则可能会发生转换并且优化器未使用索引。
  • 我确实对此进行了测试.. 删除了 sp 和执行计划,在底部使用 Option(Recompile) 重新创建它,但仍然没有为该用户加载。一个参数是 tinyint,一个是 VARCHAR(10),我会尝试切换它。
  • 报告失败还是只显示旧数据?我有一些用户特别使用 Chrome,他们的报告似乎永远在运行,但服务器上没有任何活动。清除浏览器缓存已解决。
  • 他只是拿到了装载轮,直到他最终不得不关闭它。在其上运行跟踪时,我看到 RPC:Starting 命令但从未得到 RPC:Completed 命令。在他最终结束它之前,没有其他任何东西会影响跟踪。我可以复制 RPC:Starting 命令中的确切措辞并在 1 秒内在 SSMS 中运行它。

标签: sql reporting-services ssms


【解决方案1】:

这可能是“参数嗅探”,其中 SQL Server 会为参数的特定值生成一个查询计划,该值适用于该值,但对于某些其他值则非常糟糕。

“关闭”参数嗅探的一个技巧是在存储过程中使用一些局部变量,这些变量在使用之前分配了参数值。

CREATE PROCEDURE [GetAroundParameterSniffing]
@SomeID INT
AS
BEGIN

DECLARE @LocalSomeID INT;
SET @LocalSomeID = @SomeID;

SELECT *
FROM MyTable m
WHERE m.SomeID = @LocalSomeID;

END

这迫使 SQL Server 提出一个独立于参数值的计划

【讨论】:

  • 我以前处理过参数嗅探,但通常它会影响所有用户,而且我从未见过它影响单个用户,更不用说一个月内两次影响同一用户了。我尝试了本地参数解决方案,仍然没有修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多