SQL Server exec计划用于填充计划缓存的即席查询

时间:2011-11-01 09:49:15

标签: sql sql-server sql-server-2008-r2

我们有一个每小时更新一次的数据库。对于更新或插入的每一行使用DELETE / INSERT的应用程序进行更改。 SQL Server是2008 R2标准版。

即席查询的查询执行计划正在推出影响该数据库报告并进入数据缓存的其他(更重要,更大)的执行计划。

在查看计划缓存后,我们发现(正如预期的那样)SQL正在为每个查询生成一个新计划。

我的问题是,创建计划指南会阻止SQL为每次更新生成新计划吗?

我在缓存中看到,例如,对于浮点列的更新,SQL每次都将其参数化为不同长度的数字,这意味着每个参数化查询都不同。如果我使用参数化版本的查询创建计划指南,为每列指定正确的数据类型,这会强制SQL使用此计划吗?

我知道使用存储过程可以解决这个问题,但出于其他原因,这不是一种选择。

感谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试过启用'优化广告工作负载

  

针对ad hoc工作负载的优化选项用于改进   包含许多单个工作负载的计划缓存的效率   使用临时批次。当此选项设置为1时,数据库引擎   批处理时,在计划缓存中存储一​​个小的编译计划存根   第一次编译,而不是完整的编译计划。这个   通过不允许计划缓存来减轻内存压力   充满了未经重​​复使用的编译计划。

     

将ad hoc工作负载的优化设置为1仅影响新计划;   已经在计划缓存中的计划不受影响。

Ref

Plan cache and optimizing for adhoc workloads

要启用此功能,请使用以下命令(我将首先在测试系统中测试):

SP_CONFIGURE 'show advanced options',1
RECONFIGURE
GO

SP_CONFIGURE 'optimize for ad hoc workloads',1
RECONFIGURE
GO
相关问题