首页 > 解决方案 > 单个用户的 SQL SSRS 数据集挂起

问题描述

我们有一个运行简单存储过程的 SSRS 报告,其中传递了 2 个单值参数。SSRS 报告和在 SSMS 中执行的存储过程都在 < 1 秒内返回。但是,在过去 2 周内,有一位用户两次无法加载报告。我尝试清除存储过程的执行计划无济于事,最后通过向 sp 添加一个虚拟子句 (1=1) 以更改计划来修复它。该报告适用于所有其他用户,包括我自己。什么会导致这种情况?

标签: sqlreporting-servicesssms

解决方案


这可能是“参数嗅探”,其中 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 提出一个独立于参数值的计划


推荐阅读