【问题标题】:SQL Proc slower on newer/faster machine?SQL Proc 在更新/更快的机器上变慢?
【发布时间】:2011-09-11 04:03:48
【问题描述】:

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

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

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

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

感谢您就可能导致这种放缓的原因提供任何指导。

布赖恩

【问题讨论】:

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


    【解决方案1】:

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

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

    EXEC sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'
    

    如果您有大桌子,这可能需要一段时间

    【讨论】:

    • 感谢您的快速回答。我不知道我运行的更新统计功能,几乎每个表都更新了它的索引/统计信息。该过程现在大约需要 2:15 才能完成,这比以前稍快(我看到所有 proc 核心上的活动比以前更多)。但这仍然比旧服务器慢 50%。
    • 非常感谢,我的程序现在在 22 秒内完成!!这是应该定期在数据库中完成的事情还是 SQL 会自动完成?
    • 有几个选项,例如自动更新统计信息或手动更新它们,我建议您做一些研究以了解更多关于该主题的信息。这里有一本免费的书simple-talk.com/books/sql-books/sql-server-statistics
    【解决方案2】:

    可能的问题是您的 SQL Server 对存储过程的查询计划不正确。

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

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

    2. Prevent Parameter Sniffing - 有时 SQL Server 会查看您的参数并转向一个非常特殊的查询计划。有时这是非常不可取的,并且可能会占用一个非常快的 SPROC 并将其变成一个多分钟的庞然大物。通过重新声明和复制所有参数,这不再是问题。

    3. 你也应该清除你的统计数据

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

    【讨论】:

    • 你需要做全扫描,sp_updatestats 不做全扫描,它只是一个样本。你需要做UPDATE STATISTICS TableName WITH FULLSCAN
    • 有没有一种方法可以对所有表执行 UPDATE STATISTICS,而无需单独指定每个表?该数据库中大约有 75 个表。对此 (msdn.microsoft.com/en-us/library/ms187348.aspx) 的 MS KB 似乎表明 sp_updatestats 会执行此操作,但您说这不会执行完整扫描。
    【解决方案3】:

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

    新服务器是否只有一个驱动器,而旧服务器是否分散在多个驱动器上?

    新硬盘比旧硬盘慢吗?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 2018-12-25
      • 2021-03-15
      • 2016-04-18
      • 2013-12-04
      • 1970-01-01
      • 2020-04-23
      相关资源
      最近更新 更多