我刚将数据库从旧的2008 sql服务器迁移到新的2016服务器。我让它在兼容性lvl 100中运行了一段时间,一切都很好。我已经运行了升级顾问,没有标记任何内容也在130级设置的测试环境中对系统进行了测试..一切都很好。
自从完成了生产切换后,CPU负载略高于标准,不确定一旦创建了新CE的新计划,这是否会自行纠正它。还发现了一个选项& #34;查询优化器修复"什么能使这个标志完全正确?
答案 0 :(得分:1)
简单来说,Microsoft过去发布修补程序以跟踪标志的形式查询优化器,每个修补程序都有自己的跟踪标志..
比如说,如果你有以下问题
在SQL Server 2005中使用游标执行更新操作时出现错误消息:"事务(进程ID)在锁资源上与另一个进程死锁,并被选为死锁牺牲品"
微软发布了一个HotFix,在一些跟踪标志4120 ..
因此,要应用此修复程序,您必须启用跟踪标记,如下所示
DBCC TRACEON(4120,-1)
想象一下,为所有修补程序启用跟踪标记,这将是cubersome.so Microsoft,来自SQL2005,提出了一个跟踪所有与Optimizer相关的修补程序的跟踪标记
客户可以启用此单一跟踪标记,如果他们看到任何与优化程序相关的问题。这种做法也会屏蔽其他客户,因为只有看到问题的客户才会应用此跟踪标记..
使用SQL2016,SQLServer删除了此跟踪标志,并提出了此数据库范围的配置。
启用此选项将帮助您获取最新的查询优化器修复程序,最好的部分是这可以在数据库级别启用,而不是跟踪标志,它始终在服务器级别运行。
Microsoft建议在下面启用此跟踪标志:
建议仅对遇到特定性能问题的客户使用跟踪标志4199,建议客户在将数据库迁移到最新兼容级别后删除跟踪标志4199,因为跟踪标志4199将重复用于将来可能不适用的修复程序对您的应用程序而言可能会导致生产系统上出现意外的计划性能变化
在这种情况下,Traceflag 4199等同于查询优化器修复选项
答案 1 :(得分:0)
TL:DR 如果您使用的是SQL Server 2016,并且兼容性级别设置为SQL Server 2016(130),则可以安全地忽略它。您可以将其设置为打开或关闭,没关系。 安全的选择就是取消选择
我也一直在寻找这个问题的答案。有些帖子的the answer by TheGameiswar的版本较短,没有详细介绍。
Microsoft对此的说法很简短。
在数据库级别启用或禁用“ QUERY_OPTIMIZER_HOTFIXES”,以利用最新的查询优化器修补程序,而与数据库的兼容级别无关。这等效于跟踪标志4199 Source
我发现的最清楚的答案是戴夫·皮纳尔(Dave Pinal)在他的帖子SQL SERVER – Database Scoped Configurations – Query Optimizer Fixes
中在SQL Server 2016之前,无论何时发布任何修补程序或累积更新,查询优化器的改进都不会在SQL Server中自动生效。
但是,从SQL Server 2016开始,所有查询优化器的改进现在都基于兼容性级别。
如果您使用的是SQL Server 2016,并且您的兼容性级别设置为SQL Server 2016(130),则可以安全地忽略它。您可以打开或关闭它,没关系。
SQL Server query optimizer hotfix trace flag 4199 servicing model
在SQL Server 2016中,在未启用跟踪标志4199的数据库COMPATIBILITY_LEVEL 130下将启用对SQL Server先前版本所做的跟踪标志4199修补程序。
最新的兼容性级别已经启用了跟踪标记4199下的所有以前的修补程序。这意味着将数据库升级到最新的兼容性级别并删除跟踪标记4199仍然启用了所有修补程序
最后一点,跟踪标志4199页上的以下句子表明新的热修复程序可能需要4199或“ Query Optimizer Fixes” = ON才能生效。默认情况下,在SQL 2017(CU13){compatibility 140}中测试新的数据库版本会发现值OFF。
跟踪标志4199将用于通过使用130兼容性级别来发布数据库的任何将来的SQL Server 2016修补程序。