Sql server 强制参数化
对于SQL Server中的特殊查询,您不选择启用强制参数化而不是简单参数化的原因是什么Sql server 强制参数化,sql-server,sql-execution-plan,parameterization,Sql Server,Sql Execution Plan,Parameterization,对于SQL Server中的特殊查询,您不选择启用强制参数化而不是简单参数化的原因是什么 是否存在性能开销?如果是这样的话,它是否会被重复使用的查询计划所获得的(可能的)收益所抵消?您是否分析了计划缓存以查看是否有大量的一次性使用计划 SELECT usecounts, COUNT(*), SUM(size_in_bytes) FROM sys.dm_exec_cached_plans GROUP BY usecounts ORDER BY usecounts; 您是否考虑过“”
是否存在性能开销?如果是这样的话,它是否会被重复使用的查询计划所获得的(可能的)收益所抵消?您是否分析了计划缓存以查看是否有大量的一次性使用计划
SELECT usecounts, COUNT(*), SUM(size_in_bytes)
FROM sys.dm_exec_cached_plans
GROUP BY usecounts
ORDER BY usecounts;
您是否考虑过“”设置,该设置至少只存储计划的存根,直到它被多次使用为止?我发现这很有效
如果您有很多特别的SQL,并且您看到计划缓存膨胀,那么尝试强制参数化也无妨。但是您应该彻底测试您的整个工作负载,因为在某些情况下,开销可能会超过收益(特别是如果您大量使用索引视图、持久化计算列或分区,您可能会得到更糟糕的计划)。重要的是要注意,当您打开此设置时,它也会为您运行一个DBCC FREEPROCCACHE
,因此可能会出现一些小问题,您的所有现有计划都需要在下次需要时重新编译。(当然,如果您已经有了“针对特定用途进行优化”和大量一次性使用计划,那么这对您的影响就不那么明显了,因为您主要是在清除存根,这些存根在重新使用之前可能会被刷新。)
还请注意,在许多情况下,此设置对单个查询没有影响(请参阅)。可以说,我没有特定的数据库问题,在了解此设置后,我更感兴趣。源代码没有解释启用强制参数化的负面影响,所以我很好奇为什么默认情况下不启用它。谢谢。另见: