【发布时间】: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