迁移后CTE非常慢

时间:2016-09-13 12:06:31

标签: sql-server

是否有任何特定设置告诉SQL服务器快速完成CTE?

当我们将数据库从SQL Server 2005迁移到SQL Server 2014时,我们遇到了一个问题。

  • 在旧服务器上执行查询需要0秒,现在新服务器上需要7秒
  • 一个功能需要4分27秒+/- 3秒才能执行,现在它需要无穷大。

此外,新服务器上的磁盘是SSD,而旧版本的硬盘是硬盘,新服务器公羊是32GB而旧版是12GB。

任何人都知道我们是否应该在新服务器上应用任何特殊配置?

这些sqlplan文件

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

与早期版本相比,SQL Server 2014中优化器的基数估算器部分发生了重大变化。鉴于基数估计是形成执行计划的最重要因素之一,这实际上改变了内部执行查询的方式。这种变化通常几乎总是对您有利,产生更好,更有效的执行计划,但有时它可以反过来并对性能产生负面影响。

从“简单”到“硬”的顺序,你可以做几件事:

  • 将数据库的兼容级别切换回2014年之前
  • 在服务器,会话或查询级别启用跟踪标志9481(但是 请注意,querytraceon提示需要sysadmin特权)
  • 使用计划指南冻结“好”计划
  • 重写受影响的查询以利用新的QE。

请注意,最后和最难的解决方案是同时最好的解决方案,最简单的可能是最差的。

以下是有关QE变化的更多信息及其可能的影响: https://blogs.msdn.microsoft.com/psssql/2014/04/01/sql-server-2014s-new-cardinality-estimator-part-1/

关于设置提到的跟踪标志: https://support.microsoft.com/en-us/kb/2801413