jah*_*hav 5 sql-server sql-server-2012 parameter-sniffing
我在 SQL Server 2012 中有一个优化的查询,它持续运行大约 1-3 秒。
当我在 SSMS 中运行它时,它运行得很快,但是当应用程序执行它时(通过sp_executesql
),它真的很慢,对于较大的数据大约需要 13 分钟。
在应用程序中进行一些挖掘和阅读之后,在 SSMS 中速度很快?,我得出结论,参数嗅探有问题(有一个参数)。
我禁用了它,OPTION (QUERYTRACEON 4136)
它可以快速运行sp_executesql
。
这是一个好主意(我应该保留禁用参数嗅探的选项)还是我应该调整查询以使其与sp_executesql
参数嗅探一起使用?
查询/索引调优始终是一个好主意,但与参数嗅探无关。理想情况下,每个执行计划都是最佳且可重用的,但当最佳计划根据提供的值(重要查询)而变化时,必须进行权衡。
您可以将OPTIMZIE FOR UNKNOWN
查询提示(或局部变量)用于重要查询,以便根据平均密度估计而不是所提供参数值的统计直方图生成计划。这将生成一个更稳定的计划,可以缓存和重用。然而,这种折衷计划对于某些参数值可能效率较低,并且在某些情况下成本非常高。另一种选择是OPTIMZIE FOR
带有特定值的提示,当为未知值生成的计划不令人满意时,这是合适的。
OPTION RECOMPLE
避免计划缓存以及以每次执行时编译为代价重用不适当计划的风险。对于不经常执行的查询来说,这不是问题,但对于每秒执行多次查询的 OLTP 工作负载来说,这可能会非常昂贵。因此,您需要考虑您的工作负载、参数值的变化和执行频率,以确定适合您的工作负载的最佳方法。
归档时间: |
|
查看次数: |
2483 次 |
最近记录: |