【问题标题】:lncreasing Threshold for Parallelism from 5 to 20 results in horrible query performance将并行阈值从 5 增加到 20 会导致糟糕的查询性能
【发布时间】:2019-09-12 04:00:35
【问题描述】:

在观看了 Brent Ozar 关于查询调优的视频并看到索引调优博客和文章之间达成一致后,我将 SQL Server 实例上的并行阈值成本从 5(默认)提高到 20。因此,查询开始失败有超时错误。

因此,我开始调查其中一个查询。而且,我可以看到,当成本阈值为 5 时,查询需要 11 秒才能运行,但是当成本阈值增加到 20 时,执行计划会发生变化,相同的查询需要 8 分钟以上才能运行。

其中一个区别是,在长时间运行的执行计划中(成本阈值为 20),Table Spool 后面的箭头变得很粗,当我将鼠标悬停在它上面时,它可以看到读取的行数为 1,686,216,987 .而在短期运行的执行计划(成本阈值 5)中,同一个 table spool 后面的箭头更窄,读取的行数为 27769。

在长期运行的执行计划中,我没有看到任何并行化。

任何想法如何提高成本阈值可能会使逻辑读取通过屋顶?

【问题讨论】:

  • 确保唯一改变的是两个计划之间从 5 到 20 的阈值(而不是统计数据或可能影响它的任何其他内容)。并尝试使用brentozar.com/pastetheplan 发布这两个计划
  • 我想显示查询计划,但它包含私人/机密信息。如果我有时间,我会尝试匿名发布。
  • 如果问题没有迁移,您可以尝试在dba.stackexchange.com 上发帖。

标签: sql-server indexing query-performance


【解决方案1】:

我可以通过添加索引来解决这个问题。我通过在较大的查询中进行子查询找到了正确的索引。在子查询的执行计划中,Clippy 提供了一个推荐索引,不仅解决了提高并行度阈值的问题,而且无论是否提高阈值,整体查询速度都更快。

【讨论】:

    猜你喜欢
    • 2021-04-05
    • 2023-03-23
    • 2017-04-02
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2011-04-26
    相关资源
    最近更新 更多