首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询计划XML:对于除1以外的任何maxdop,一个stmt的DegreeOfParallelism是1 (maxdop 1导致DegreeOfParallelism =0,原因是MaxDopSetToOne)

查询计划XML:对于除1以外的任何maxdop,一个stmt的DegreeOfParallelism是1 (maxdop 1导致DegreeOfParallelism =0,原因是MaxDopSetToOne)
EN

Database Administration用户
提问于 2022-01-24 17:31:15
回答 1查看 84关注 0票数 0

我有两个选择的程序。一条语句尊重服务器/数据库的/query提示的maxdop设置,并使用并行性,另一种语句比较困难,从不并行。

8核心服务器和这个db被配置为maxdop 0(不是很好,我可以更改它,但是我想离开它,看看到底发生了什么)。成本阈值为5。

自动更新状态是打开的,表上的状态显示为今天早些时候正在更新。今晚几个小时后,我可能会尝试手动更新桌子上的数据。

此服务器和db是AG二级副本。主语句上的相同过程运行得很快,两个语句都并行。主体有更多的核心,它的maxdop显式地设置为8。

语句1查询提示

  • 没有查询提示-> DegreeOfParallelism =1
  • Maxdop 0 -> DegreeOfParallelism =1
  • Maxdop 1 -> DegreeOfParallelism =0(原因MaxDopSetToOne)
  • Maxdop 8 -> DegreeOfParallelism =1
  • Maxdop 7 -> DegreeOfParallelism =1

语句2查询提示

  • 没有查询提示-> DegreeOfParallelism =8
  • Maxdop 0 -> DegreeOfParallelism =8
  • Maxdop 1 -> DegreeOfParallelism =0(原因MaxDopSetToOne)
  • Maxdop 8 -> DegreeOfParallelism =8
  • Maxdop 7 -> DegreeOfParallelism =7

谢谢你的帮助!

EN

回答 1

Database Administration用户

发布于 2022-01-24 20:08:56

这是maxdop,不是mindop

在任何级别设置MAXDOP只对查询的并行性设置上限。它并不指示查询并行;查询仍然必须:

  • 估计的成本是否符合并行计划的要求?
  • 不是一个微不足道的计划
  • 没有任何强制它运行单线程的构造(标量UDF,插入@table变量,等等)
  • 并行计划的估计成本是否低于串行计划的估计成本?

实施者

如果你想强迫一个并行计划,你需要

  • 在会话或查询级别使用跟踪标志8649作为提示
  • 如果您使用的是较新版本的Server,则可以使用ENABLE_PARALLEL_PLAN_PREFERENCE使用提示。

这里应该指出的是,这两个选项都没有得到官方的支持,而且可能只用于测试和实验。

不过,这可能是最具启发性的事情,因为它将显示并行计划的估计成本,以及它是否高于串行计划的估计成本,或者如果仍然存在一些局部抑制并行性的东西。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/306518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档