Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 强制参数化_Sql Server_Sql Execution Plan_Parameterization - Fatal编程技术网

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; 您是否考虑过“”

对于SQL Server中的特殊查询,您不选择启用强制参数化而不是简单参数化的原因是什么


是否存在性能开销?如果是这样的话,它是否会被重复使用的查询计划所获得的(可能的)收益所抵消?

您是否分析了计划缓存以查看是否有大量的一次性使用计划

SELECT usecounts, COUNT(*), SUM(size_in_bytes) 
  FROM sys.dm_exec_cached_plans
  GROUP BY usecounts
  ORDER BY usecounts;
您是否考虑过“”设置,该设置至少只存储计划的存根,直到它被多次使用为止?我发现这很有效

如果您有很多特别的SQL,并且您看到计划缓存膨胀,那么尝试强制参数化也无妨。但是您应该彻底测试您的整个工作负载,因为在某些情况下,开销可能会超过收益(特别是如果您大量使用索引视图、持久化计算列或分区,您可能会得到更糟糕的计划)。重要的是要注意,当您打开此设置时,它也会为您运行一个
DBCC FREEPROCCACHE
,因此可能会出现一些小问题,您的所有现有计划都需要在下次需要时重新编译。(当然,如果您已经有了“针对特定用途进行优化”和大量一次性使用计划,那么这对您的影响就不那么明显了,因为您主要是在清除存根,这些存根在重新使用之前可能会被刷新。)


还请注意,在许多情况下,此设置对单个查询没有影响(请参阅)。

可以说,我没有特定的数据库问题,在了解此设置后,我更感兴趣。源代码没有解释启用强制参数化的负面影响,所以我很好奇为什么默认情况下不启用它。谢谢。另见: