简介
Microsoft SQL Server 版本低于 SQL Server 2000 Service Pack 3 (SP3) 以默认状态将大多数修补程序传送到查询优化器,以防止现有生产客户看到可能导致性能回归的预期计划更改。 最初,每个修补程序在单独的跟踪标志下传递。 之后,更改了这种做法,以便大多数标志在 4199 (单个跟踪标志) 。 从以下更新开始,此新做法已跨多个版本启动:
-
SQL Server 2005 Service Pack 3 (SP3) 累积更新 6
-
SQL Server 2008 Service Pack 1 (SP1) 累积更新包 7
-
SQL Server 2008 R2 (RTM)
跟踪标志 4199 用于收集预期在将来版本中默认启用的修补程序,而其他跟踪标志用于修复计划在当前版本中默认变为打开的情况。 从 SQL Server 2016 RTM 开始,数据库 COMPATIBILITY_LEVEL 设置将默认启用与跟踪标志 4199 相关的修补程序。 本文介绍 2016 和更高版本中计划影响修补程序SQL Server的机制和策略。
更多信息
在 SQL Server 2016 年,在数据库 COMPATIBILITY_LEVEL 130 下启用对以前版本 SQL Server 的跟踪标志 4199 修补程序,但不启用跟踪标志 4199。 跟踪标志 4199 将用于使用 130 兼容级别为数据库发布任何SQL Server 2016 年修补程序。 由于跟踪标志 4199 仅建议用于看到特定性能问题的客户,因此建议客户在将其数据库迁移到最新兼容级别后删除跟踪标志 4199,因为跟踪标志 4199 将重新用于可能不适用于应用程序且可能导致生产系统意外的计划性能更改的未来修复。 这意味着为给定产品版本支持的每个兼容级别启用了不同的跟踪标志 4199 修补程序。 最新的兼容性级别已在跟踪标志 4199 下启用以前的所有修复。 这意味着,将数据库升级到最新兼容级别并删除跟踪标志 4199 仍支持工作负荷在数据库升级之前利用的所有修补程序,而不是新的修补程序。 如果稍后客户遇到查询性能问题,请尝试在测试环境中启用数据库范围选项 QUERY_OPTIMIZER_HOTFIXES 或查询提示ENABLE_QUERY_OPTIMIZER_HOTFIXES,以确定问题是否得以解决。 请参阅有关 QUERY_OPTIMIZER_HOTFIXES 的文档。
备注 默认情况下,在 2016 SQL Server中创建的数据库使用兼容级别 130,并且已启用新的优化器逻辑。
此模型的主要优点是它在升级过程中降低生产系统的风险。 此方法将新主版本的 SQL Server与自动启用所有新的查询处理器更改分离。 由于主版本升级会更改文件格式且不可逆,因此使用 COMPATIBILITY_LEVEL 设置是个不错的主意,因为如果在升级期间发现意外的计划性能问题,客户可以快速降级。 如果客户发现阻止应用程序升级的意外计划更改,客户可以通过使用查询存储应用适当的计划提示来强制使用以前的计划来缓解这种情况,或者通过联系 Microsoft 客户支持部门帮助解决问题以提供解决方法或修补程序来缓解这种情况。 缓解所有问题后,可以继续升级。 客户应在 2016 年 10 月将此功能SQL Server规划中。 下表说明了从 2016 年 10 月开始跟踪标志 4199 SQL Server的模型。
设置 |
SQL兼容级别 |
跟踪标志 4199 |
2016 RTM 之前优化SQL Server修补程序 |
2016 RTM SQL Server优化器修补程序 |
---|---|---|---|---|
1. |
120 |
关闭 |
已禁用 |
已禁用 |
2. |
120 |
打开 |
已启用 |
已禁用 |
3. |
130 |
关闭 |
按兼容性级别启用 |
已禁用 |
4. |
130 |
打开 |
按兼容性级别启用 |
按兼容性级别启用 |
注意 对于新升级到 2016 年 10 月版的客户,建议SQL Server 3。
对于 2016 年 10 月SQL Server的主要版本,Microsoft 计划继续使用此服务模型来优化修补程序。 默认情况下,或每个版本,将在下一兼容级别启用以前版本的任何跟踪标志 4199 修补程序。 这意味着,客户迁移到最新兼容级别后,建议的状态是禁用跟踪标志 4199。 以后的修补程序将使用跟踪标志 4199 为必须启用应用程序中的这些特定修补程序的客户启用修补程序。 建议客户在应用程序升级到最新兼容级别后禁用跟踪标志 4199,以避免意外地在应用程序上启用意外的未来优化器更改。 升级到最新兼容级别并删除跟踪标志 4199 仍然支持工作负荷在升级之前利用的所有修复,而不是新的修补程序。备注 尽管许多优化器修补程序在跟踪标志 4199 下启用,但一些修补程序使用其他跟踪标志。 跟踪标志 4199 过去涵盖广泛适用的跟踪标志,并且在将来的版本中可能会默认启用这些标志。 备用跟踪标志用于修补程序中,其中条件非常特定于少数客户,修复可能导致其他类型的应用程序的性能回归,或者内部功能在准备好为每个人启用之前可能会看到更改。 Microsoft 将继续根据需要使用其他跟踪标志来为产品提供服务。
注意 本文重点介绍在最新产品的最新兼容级别发布跟踪标志 4199 修补程序的模型。 (在发布时,这是 SQL Server 2016.) 优化器修补程序可以在 2016 年 1 月 120 SQL Server 或更低兼容级别 (120 或更低) 版本SQL Server发布。 Microsoft 将评估每个案例,并确定是使用跟踪标志 4199 还是不同的跟踪标志。 由于在移动到更高版本的兼容级别时也会启用非修补程序更改,因此没有具体的承诺,即升级期间不会发生任何计划更改 (不管是否具有跟踪标志 4199) 。 客户应始终针对生产应用程序仔细测试对兼容性级别的更改,如果存在与计划选择相关的性能问题,则应该使用缓解技术,例如查询存储。 为参考,在引入跟踪标志 4199 之前,以下跟踪标志用于查询处理器修补程序:4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4115, 4116, 4117, 4119, 4120, 4121, 4122, 4124, 4125, 4126, 4127, 4128, 4129, 4131, 4133, 4135.
SQL Server 2012 和更高版本
跟踪标志 4199 包含在 2012 和更高版本的 SQL Server 版本中。
如何启用跟踪标志 4199
可以在启动时或在用户会话中启用跟踪标志 4199。 此跟踪标志具有全局级别或会话级效果。 若要启用跟踪标志 4199,请使用 DBCC TRACEON 命令或使用 –T 4199 作为启动参数。
如果使用 DBCC TRACEON\TRACEOFF,则不会为存储过程重新生成新的缓存计划。 计划可以在没有跟踪标志的情况下创建的缓存中。 若要详细了解如何启用或禁用跟踪标志,以及全局和会话级跟踪标志的说明,请参阅联机SQL Server主题:参考
有关更新的命名架构SQL Server,请单击以下文章编号,查看 Microsoft 知识库中的文章:
822499 新软件更新包Microsoft SQL Server命名架构 有关软件更新术语的详细信息,请单击以下文章编号以查看 Microsoft 知识库中的文章:
824684 用于描述 Microsoft 软件更新的标准术语的说明