SQL Server 升级 2008 -> 2016 / 100 到 130 兼容性慢查询,新 CE 杀了我

dav*_*vey 8 sql-server sql-server-2016

最近从 SQL Server 2008 升级到 2016,在兼容模式 100 下运行了 4 个月,一切都进展顺利(快速)。经过大量测试并运行迁移顾问后,我决定轻弹“开关”并将兼容性级别更改为 130 ...

这对相当多的 sprocs/queries 产生了不利影响,其中一些在几秒钟内运行现在需要几分钟。CPU也因此而上升。

这些查询写得很好,我每晚都会重建索引和统计信息。

比较看起来相同的计划,稍微偏离几个百分比,但仍然是相同的计划!我认为 CE 没有得到很好的行数。

还有什么奇怪的,有时查询在 130 中运行良好,所以我认为一切都很好,但突然收到警报,查询被占用了 2 行不同的时间,然后我必须添加回 OPTION (QUERYTRACEON 9481) 才能得到它又快了。

我还有什么可以检查/做的事情来帮助这些查询恢复昔日的辉煌吗?

我应该从缓存中删除所有存储过程计划吗???

Joe*_*ish 11

微软在SQL Server 2016上有改变兼容模式的升级策略,引用链接文章:

将查询处理器升级到最新版本代码的推荐工作流程是:

  1. 在不更改数据库兼容性级别的情况下将数据库升级到 SQL Server 2016(保持在先前级别)

  2. 在数据库上启用查询存储。有关启用和使用查询存储的更多信息,请参阅使用查询存储监控性能。

  3. 等待足够的时间来收集工作负载的代表性数据。

  4. 修改数据库兼容级别为130

  5. 使用 SQL Server Management Studio,评估兼容性级别更改后特定查询是否存在性能回归

  6. 对于存在回归的情况,在查询存储中强制执行先前的计划。

  7. 如果存在无法强制执行的查询计划或如果性能仍然不足,请考虑将兼容性级别恢复为之前的设置,然后联系 Microsoft 客户支持。

您可以针对您的情况尝试一个版本。将兼容模式改回 100,启用查询存储,经过一个完整的业务周期并获得良好的基线,然后更改兼容模式并使用查询存储来分析运行不佳的查询并对其采取进一步措施。