使用跟踪标志2453提高表变量性能

时间:2018-01-09 13:12:19

标签: sql sql-server database-administration

我们在SQL Server 2016中启用了跟踪标志2453(表变量性能),并修复了性能问题。

在SQL Server级别启用此跟踪标志是否有任何缺点?

请让我知道你对此的看法。

2 个答案:

答案 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行的性能问题。 不确定这是否已经改变,但可能值得一看,看看是否可以更好地使用临时表对变量和摆脱跟踪标志,即使支持,我宁愿根本不使用它们。