跟踪标志 4199

Dav*_*son 5 sql-server execution-plan

微软关于Trace Flag 4199的知识库文章有点混乱:

...任何可能影响查询执行计划的修补程序都必须由跟踪标志控制。除了对可能导致错误结果或损坏的错误的修复外,这些修补程序默认情况下处于关闭状态,并且需要跟踪标志才能启用修复。

注意:我假设“修补程序”是累积更新(又名“CU”)。如果我错了,请发表评论。

所以...让我们假设我正在运行最新的 Service Pack。SP 包括以前 CU 中的所有修复。是否为 SP(甚至RTM)打开了修补程序?还是仍需要跟踪标志 4199?

Aar*_*and 5

在这种情况下,您应该将“修补程序”视为最终出现在 Service Pack、累积更新或按需修补程序中并受此跟踪标志管辖的任何修补程序。这些修复都在每个主要受支持版本的最新版本中,但除非打开跟踪标志,否则不会使用它们。这是因为,在某些情况下,“修复”实际上会导致回归(和更糟糕的性能)——人们不应该仅仅因为他们应用了更新或服务包而期望在计划生成方面有重大变化。

我不确定这是否是一个详尽的列表,但本文列出了许多最终归入 4199 保护伞的 41xx TF。此博客文章中提供的 v4 PDF可能包含更多标志(我没有交叉检查),但肯定包含有关几个单独修复的更多信息。

在未来的某个时候,我怀疑 TF4199 的所有增强功能都将在新的完整主要版本中默认启用(但不会在服务包或 CU 中启用)。也许他们会提供一个跟踪标志来关闭它们,就像你可以关闭新的基数估计器一样。