【问题标题】:Why is the Query Execution Plan on my test-environment different from live-server?为什么我的测试环境上的查询执行计划与实时服务器不同?
【发布时间】:2020-11-16 20:32:32
【问题描述】:

我将一个 sql 备份恢复到我的测试服务器中。其中一个主要查询运行缓慢,因此我使用估计和实际执行计划对其进行了检查,并做出了一些改进以加快速度。

检查实时服务器以查看使用更强大的服务器时查询运行的速度有多慢,估计的和实际的执行计划都表明某些内容已经优化。

显然 MS SQL Server 具有自动调整功能。服务器是否可能已经优化了实时数据库?我该如何检查?

编辑:我想我正在寻找查询统计数据

【问题讨论】:

  • DBCC SHOW_STATISTICS ('schema.table', [Index_Name] 会告诉您索引的统计信息最后一次更新的时间。这可能会对情况有所帮助。您当然应该能够比较生产数据库和备份之间的差异。
  • 另外,如果两台机器的处理器数量不同,MAXDOP设置也会不同,这可能会改变执行计划。并行服务器设置的阈值也是如此。

标签: sql-server tsql


【解决方案1】:

您应该使用 Brent Ozarks“执行后计划”并发布计划。前提是它是当前的备份并且所有的东西都是平等的,例如数据、行数等。索引都在线,SQL Server 版本。

例如,SQL 版本很重要,因为基数估计器发生了变化。这肯定会改变一些事情。服务器级别的 MAXDOP 设置是否相同?如果 ypur 测试服务器设置为 1 或 2,而另一个有 16 个 CPU,则测试服务器查询可能无法获得急需的执行计划。一旦我们修复了 MAXDOP 设置,我有一个 23,000,000 行查询从 45 分钟缩短到 1 分钟(这是一个可能出错的示例,而不是建议。)

所以我用估计的和实际的执行计划检查了它,做了一些不合理的事情来加快它。

我会避免这种情况,并首先尝试了解为什么这些计划会有所不同。新的索引会使事情进一步复杂化。

要考虑的其他系统级别设置是统计信息和内存设置。同样,您应该发布您的计划以更好地理解这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多