查询计划更改 SQL Server 2014 中的性能更糟

Jef*_*eff 10 sql-server execution-plan sql-server-2014

我们最近将我们的服务器从 SQL Server 2008R2 升级到 SQL Server 2014。我们有一个查询在 2008R2 中运行良好,但现在在 2014 年运行速度非常慢并且执行计划很糟糕。

我做了几次测试...

  1. 将 2014 DB 切换回 2008/2012 兼容模式。
  2. 使用分页测试查询。

这两者都导致查询运行与 SQL Server 2008R2 相同且速度快。

为什么 SQL Server 2014 中的计划如此糟糕且查询运行时间如此之长?

估计/实际

此图显示了 2 个查询,一个使用 rownumber 其在 2008R2 中运行的方式,然后第二个是使用分页进行修复。两者都在 2014 年运行,两者都非常不同,但在 2008 年,我们看到的性能与 2014 年使用分页相同。

小智 7

这不是问题,这是设计使然,被视为性能改进。

如果您的查询没有按预期运行,您需要在数据库/应用程序的代码中解决这个问题。

您可以通过在服务器、会话或查询级别(使用OPTION (QUERYTRACEON 9481))使用跟踪标志 9481 来强制使用旧的肉体估计器。无论数据库的兼容性级别如何,这都会强制执行。

CSS 团队还在这里发布了大量信息。

关于 Cardanility Estimator 的更详细的帖子以及SQL Server 2014 中围绕该过程的更改,包括示例。