【问题标题】:SQL Server 2014 upgraded - queries very slowSQL Server 2014 升级 - 查询非常慢
【发布时间】:2015-05-01 21:43:09
【问题描述】:

我们计划将生产数据库从 SQL Server 2008 升级到 2014。我已经有两个单独的 SQL Server(2008 和 2014)运行两个企业版。

这两台服务器具有相同数量的 CPU 内核 (4) 和 Ram (32GB),SQL Server 2014 甚至具有更好的 CPU 速度,但它是在 VMWare 环境中。

我是如何将数据库从 2008 年迁移到 2014 年进行测试的?首先,我从 2008 年开始备份数据库,然后在 2014 年恢复它。之后,更正用户帐户....并确保它工作正常。

接下来,我运行了从不同站点建议的所有这些命令:

EXEC sp_MSForEachTable "Print 'Rebuild index on: ?'; SET QUOTED_IDENTIFIER ON; ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 80);"
EXEC sp_MSforeachtable @command1="print 'Reorganizing indexes for ?' ALTER INDEX ALL ON ? REORGANIZE"
EXEC sp_MSforeachtable @command1='EXEC sp_recompile ''?'''
EXEC sp_MSforeachtable @command1='UPDATE STATISTICS ? WITH FULLSCAN';
Change Compatibility To SQL Server 2014 (120)

问题:我在旧的 SQL Server 2008 上选择了一个大约需要 10 秒的查询,并在 SQL Server 2014 上运行它,相同的查询比旧的 SQL Server 2008 慢两次——大约需要 20 秒才能完成。我检查了两台服务器上的执行计划并比较了几乎相同的成本百分比值。

我不确定还可以尝试什么。请指教。

谢谢,

【问题讨论】:

  • 假设这是一个需要很长时间的视图:我最近自己做了这个,发现sp_refreshview viewname 非常需要。 msdn.microsoft.com/en-us/library/ms187821.aspx
  • 这不是一个视图,它只是一个常规的 SELECT 查询。谢谢!
  • 您是否更新了数据库中的统计信息?另外:如果您在新服务器上进行了全新还原,则可能需要一些时间才能将最常用的页面缓存在内存中 - 所以在还原之后,您的性能可能会有所降低,因为几乎所有数据检索都必须进行下到磁盘并获取页面
  • 我已经尝试过 'EXEC sp_MSforeachtable @command1='UPDATE STATISTICS ?全扫描';'但仍然无法正常工作。不知道为什么,完全相同的查询,但在 SQL 2014 上速度很慢。
  • 能否提供两台服务器的执行计划?旧的和新的?

标签: sql-server


【解决方案1】:

可能的原因可能是:

  1. 某处出现了僵局
  2. 数据库的统计信息和/或查询计划缓存不正确
  3. 查询太复杂,需要调优

死锁可以通过活动监视器解决

第二个问题将导致数据库使用次优查询计划。可以通过清除统计信息来解决: 试试

exec sp_updatestats

如果不行你也可以试试

dbcc freeproccache

【讨论】:

  • 感谢您的建议。我尝试了 exec sp_updatestats 和 dbcc freeproccache,但仍然遇到同样的问题。任何建议如何解决“死锁某处”?和“计划缓存不正确?
  • 我不是处理死锁或使用活动监视器的专家,但可以帮助您查询,您可以显示查询吗?
  • 两台服务器上的数据是否完全相同?您还可以确保您没有在查询中的某些地方使用“服务器名称”吗?
  • 是的,这两项服务的确切数据。我将桌面远程连接到每台服务器,并从 MS Management Studio 本地运行查询。事实上,我不相信 SQL Server 2014 更慢,所以我让 IT 为我构建了另一台 VM 服务器,与 SQL 2014 相同的资源,然后我加载了 SQL 2008,恢复了数据库,然后尝试相同的查询。同样的结果,SQL 2008 的速度更快,而 SQL 2004 的时间几乎快了一倍。感谢您的帮助。
【解决方案2】:

在 sqlserver 2014 中附加数据库后,应将兼容级别设置为 sql server 2008(100)。数据库名称>右键单击>属性>选项

【讨论】:

    猜你喜欢
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2016-01-27
    • 2014-07-23
    相关资源
    最近更新 更多