我们在SQL Server 2016中启用了跟踪标志2453(表变量性能),并修复了性能问题。
在SQL Server级别启用此跟踪标志是否有任何缺点?
请让我知道你对此的看法。
答案 0 :(得分:1)
首先,您应该指定此标志的作用:
您可以打开跟踪标志2453以允许触发表变量 更改足够数量的行时重新编译。这可能允许 查询优化器选择更有效的计划。
FIX: Poor performance when you use table variables in SQL Server 2012 or SQL Server 2014
现在你可以自己解决,可能的缺点是什么。
如果你的服务器上有很多查询使用表变量,那么这就是OLTP系统,你有太多的重新编译,这个TF会让它变得更糟。
你可以在这里找到同样的东西:Using Trace Flag 2453 to Improve Table Variable Performance
如果你是的话,你应该总是使用跟踪标志2453或OPTION(RECOMPILE)吗? 使用表变量?也许。但我倾向于“它取决于”。 微软表示,“跟踪标志必须谨慎使用,因为它 可以增加可能花费超过的查询重新编译次数 通过更好的查询优化节省“。
答案 1 :(得分:0)
很久以前我记得我的开发人员过去常常使用表变量而不是临时表,因为表变量存储在内存中而不是tempdb中的临时表中,内存应该更快。即使这是真的,那时表变量没有统计数据导致表存储超过1行的性能问题。 不确定这是否已经改变,但可能值得一看,看看是否可以更好地使用临时表对变量和摆脱跟踪标志,即使支持,我宁愿根本不使用它们。