如何强制SSIS包不重用执行计划?

时间:2020-05-20 17:06:49

标签: sql-server ssis

我知道在SQL Server中,可以在运行存储过程时强制重新编译执行计划。

但是,我有一个通过SQL Agent运行的SSIS程序包。在对其运行的数据进行了一些重大更改之后,该程序包从耗时3分钟变为耗时3小时。当我在SSDT中手动运行程序包时,或者在服务器重新启动后,程序运行正常。经过一些故障排除后,我相信这是因为它所缓存的执行计划对于它正在处理的数据而言不再正确。

有一种方法可以告诉SQL Server,当它运行此特定的SSIS程序包时,应该重新编译所有内容并获得新的执行计划吗?它所处理的数据的大小每天都可能千差万别。

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果希望查询每次运行都重新生成查询计划,请使用OPTION (RECOMPILE)。您会发现这通常用于“厨房水槽”或“全包查询”,以避免不良的查询计划缓存,如下所示:

SELECT *
FROM dbo.MyTable
WHERE (Column1 = @Variable1 OR @Variable1 IS NULL)
  AND (Column2 = @Variable2 OR @Variable2 IS NULL)
  AND (Column3 = @Variable3 OR @Variable2 IS NULL)
OPTION (RECOMPILE);

当然,这将产生重新生成查询计划的费用,对于复杂的查询而言,这也可能是昂贵的(对于“全包”查询,最好采用动态SQL路由)。