1

设置:

使用 SQL Server 2008 R2。

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

问题:

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

笔记:

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

4

2 回答 2

3

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

通常,虽然不需要诉诸诸如复制计划之类的恶作剧。看看实际的执行计划,所有的答案都在那里

于 2013-04-25T13:56:28.773 回答
1

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

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

于 2013-04-25T13:56:01.897 回答