2016-09-13 63 views
3

是否有任何特定设置可以告诉SQL服务器使CTE更快?迁移后CTE速度很慢

我们面临的一个问题,当我们提出我们从SQL Server 2005数据库到SQL Server 2014

  • 查询正在采取0秒到旧服务器上执行,现在只需要在新的现在7秒服务器
  • 一个函数需要4分27秒+/- 3秒才能执行,现在需要无穷大。

此外,新服务器上的磁盘是SSD,而旧的是HDD,新的服务器RAM是32GB,而旧的是12GB。

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

这些的sqlplan文件

任何帮助高度赞赏。

+1

https://www.mssqltips.com/sqlservertip/1936/sql-server-database-migration-checklist/ – Jeremy

+1

请从旧服务器和新服务器添加相应的执行计划。 – Lijo

+0

不幸的是,没有什么神奇的“让我的查询更快”开关。你必须这么做:检查丢失的索引和/或过时的统计信息,如果没有帮助,则比较旧服务器和新服务器上的执行计划。 http://dba.stackexchange.com上的好人可以帮助你完成后一部分。 – Heinzi

回答

2

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

有几件事情可以做,为了从“简单”到“硬”:

  • 切换回数据库的兼容级别预先2014
  • 上可以启用跟踪标志9481服务器,会话或查询级别(但 请注意,querytraceon提示reqires系统管理员权限)
  • 冻结“好”的计划,计划指南
  • 重写受影响的查询采取新的量化宽松政策的优势。

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

下面是关于量化宽松政策的变化更多的信息和它可能产生的影响: 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