更快/更快的机器上的SQL Proc会慢吗?

时间:2011-06-08 19:35:02

标签: sql sql-server optimization stored-procedures sql-server-2008-r2

我有一个相当复杂的程序,目前需要大约1:30(分:秒)才能完成。我们正在转换到新服务器,当我对新服务器上的相同数据运行相同的查询时,几乎需要2:30完成。

旧服务器是单一的proc - 双核Intel 4 2.8 GHz CPU,带有3 GIG RAM,运行Windows 2000和SQL 8.新服务器是双进程 - 双核(总共4核)3.4 GHz机器,6运行Windows 2008 R2和SQL 2008的RAM的GIG。

我原本希望看到这个程序(每小时频繁运行)使用新机器和新SQL加快速度但现在速度慢了50%以上?!我在一家小公司工作,完成所有的编程和网络,但我不是DBA。是否可能在旧机器/ SQL上进行某种优化,而新机器/ SQL上没有这种优化?除了运行已设置为使用所有可用RAM的SQL之外,新机器什么都不做。

当我运行程序时,它似乎只使用一个处理器核心和它可以获得的所有RAM(在两台机器上都相同)。并且它似乎只使用一个处理器平均约50%。

对于可能导致这种放缓的指导,我们表示赞赏。

布赖恩

3 个答案:

答案 0 :(得分:4)

我假设您通过执行还原来升级数据库,更新统计信息(使用完全扫描)还是重建所有索引? 否则你将无法获得最佳计划

进行全面扫描,你可以这样做

EXEC sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'

如果您有大表

,这可能需要一段时间

答案 1 :(得分:2)

可能的问题是您的SQL Server对存储过程的查询计划错误。

以下是一些解决问题的常用方法:

  1. Optimize for Unknown - 告诉您的SQL Server,对于此存储过程,它应该始终确定要使用的查询计划 - 它不会使用历史信息。这通常会导致更一致的运行时间。

  2. Prevent Parameter Sniffing - 有时SQL Server会查看您的参数并转向特定的查询计划。有时候这是非常不受欢迎的,可以采用速度非常快的SPROC并将其变成一个多分钟的庞然大物。通过重新声明和复制所有参数,这将成为一个无问题。

  3. 您还应该清除统计信息

    EXEC sp_MSForEachTable 'Update Statistics ''?'' with FULLSCAN'

答案 2 :(得分:1)

如果更新统计信息和其他数据库更改没有帮助,请检查服务器本身。

新服务器是否只有一个驱动器,旧服务器是否分为多个驱动器?

新硬盘驱动器的速度是否慢于旧硬盘驱动器?

是否在新服务器上启用了病毒扫描?

查找其他服务器配置问题。