sql - 单个用户的 SQL SSRS 数据集挂起
问题描述
我们有一个运行简单存储过程的 SSRS 报告,其中传递了 2 个单值参数。SSRS 报告和在 SSMS 中执行的存储过程都在 < 1 秒内返回。但是,在过去 2 周内,有一位用户两次无法加载报告。我尝试清除存储过程的执行计划无济于事,最后通过向 sp 添加一个虚拟子句 (1=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 提出一个独立于参数值的计划
推荐阅读
- java - SharedPreference 上的 ArrayIndexOutOfBoundsException 与布尔数组?
- javascript - 在 angularjs 中路由时,引导模式背景不会被删除
- python - 如何在 python 中运行命令,提供输入,然后读取输出
- reactjs - 未捕获的类型错误:无法读取未定义的属性“组件”
- mysql - 如何解决 SSMA 中的 M2SS0020(超出索引键)
- excel - 在excel中查找最早日期
- android - 没有找到与给定名称匹配的资源:attr 'android:keyboardNavigationCluster'
- html - display:inline-grid 不支持非常新鲜的 safari
- android - (Android)Firebase 数据库中是否有一种简单的方法可以让节点的位置按孩子排名?
- vba - 基于 Excel 循环条件的连接