将存储的Proc执行计划复制到另一个数据库

时间:2013-04-25 13:50:36

标签: sql-server sql-server-2008-r2 sql-execution-plan parameter-sniffing

设定:

使用SQL Server 2008 R2。

我们有一个间歇性运行很长时间的存储过程。我想测试参数嗅探导致查询引擎选择错误计划的理论。

问题:

如何将查询的执行计划从一个数据库复制到另一个(测试)数据库?

注意:

我完全清楚这可能不是参数嗅探问题。但是,如果可能的话,我想通过创建测试计划并使用它的动作。因此,请不要让我发布代码和/或表模式,因为这在目前无关紧要。

2 个答案:

答案 0 :(得分:3)

计划不可移植,它们绑定到对象ID。您可以使用planguides,但它们严格依赖于数据库。您需要做的是测试同一数据库的还原备份。在恢复的备份上,您可以使用planguide。但是为了相关性,机器的物理特性应该相似(CPU,RAM,磁盘)。

通常情况下,人们不需要诉诸这样的诡计来复制计划。查看实际的执行计划,所有答案都在就在那里

答案 1 :(得分:1)

您是否尝试过使用OPTIMIZE FOR子句?有了它,您可以更轻松地调整您的过程,并且不会因为这些数据库中的差异而导致您从另一个数据库复制的计划不合适(如果甚至可以复制计划)。

http://www.mssqltips.com/sqlservertip/1354/optimize-parameter-driven-queries-with-sql-server-optimize-for-hint/