在SQL Server中使用选项(MAXDOP 1)的目的是什么?

在SQL Server中使用选项(MAXDOP 1)的目的是什么?,sql,sql-server,Sql,Sql Server,我从来没有清楚地理解过MAXDOP的用法。我知道这会使查询更快,而且这是我可以用于查询优化的最后一项 但是,我的问题是,何时何地最适合在查询中使用它?这是一个关于SQL Server中并行性的一般性漫谈,它可能无法直接回答您的问题 从联机丛书,在MAXDOP上: 设置处理器的最大数量 查询处理器可用于执行 单索引语句。较少的 处理器的使用取决于 当前系统工作负载 请参阅关于并行性和数据包等待类型的说明。这很有趣 通常,在OLTP数据库中,我的观点是,如果一个查询非常昂贵,需要在多个处理器上执行,

我从来没有清楚地理解过
MAXDOP
的用法。我知道这会使查询更快,而且这是我可以用于查询优化的最后一项


但是,我的问题是,何时何地最适合在查询中使用它?

这是一个关于SQL Server中并行性的一般性漫谈,它可能无法直接回答您的问题

从联机丛书,在MAXDOP上:

设置处理器的最大数量 查询处理器可用于执行 单索引语句。较少的 处理器的使用取决于 当前系统工作负载

请参阅关于并行性和数据包等待类型的说明。这很有趣

通常,在OLTP数据库中,我的观点是,如果一个查询非常昂贵,需要在多个处理器上执行,则需要将查询重新写入更高效的内容


为什么添加MAXDOP(1)会获得更好的结果?如果没有实际的执行计划,很难说,但它可能非常简单,因为执行计划完全不同,如果没有选项,例如使用不同的索引(或更可能)以不同方式连接,使用合并或散列连接

正如Kaboing所提到的,
MAXDOP(n)
实际上控制查询处理器中使用的CPU内核数量

在完全空闲的系统上,SQL Server将尝试尽快将表拉入内存,并在内存中连接它们。这可能是,在您的情况下,最好用一个CPU来实现这一点。这可能与使用
选项(强制顺序)
的效果相同,后者强制查询优化器使用您指定的连接顺序。在某些情况下,我看到
选项(强制计划)
将查询的执行时间从26秒减少到1秒

《在线丛书》接着说,
MAXDOP
的可能值为:

0-根据当前系统工作负载使用可用CPU的实际数量。这是默认值和建议的设置

1-禁止并行计划生成。该操作将以串行方式执行

2-64-将处理器数量限制为指定值。根据当前的工作负载,可能会使用较少的处理器。如果指定的值大于可用CPU数量,则使用实际可用CPU数量

我不确定
MAXDOP
的最佳用法是什么,但是我想猜测一下,如果表上有8个分区,由于I/O限制,您可能希望指定
MAXDOP(8)
,但我可能错了

以下是我找到的一些有关
MAXDOP
的快速链接:


在输入异常的SQL server中存在几个并行化错误。选项(MAXDOP 1)将避开它们


编辑:旧。我的测试主要是在SQL2005上完成的。其中大多数似乎已经不存在了,但每隔一段时间,我们就会质疑SQL 2014做了一些愚蠢的事情时的假设,然后我们回到原来的方式,它就可以工作了。我们从未成功地证明,在最近的案例中,这不仅仅是一个糟糕的计划生成,因为在新版本中,可以依靠SQL server来正确使用旧方法。由于所有情况都是IO绑定的查询,所以MAXDOP 1不会有什么坏处。

作为旁白,MAXDOP显然可以作为解决潜在严重错误的方法:


根据我观察到的性能问题,添加我的2美分

如果简单查询被不必要地并行化,那么它会带来比解决问题更多的问题。但是,在将MAXDOP作为“下意识”修复添加到查询中之前,需要检查一些服务器设置

在中,MAXDOP和“并行性成本阈值”(
CTFP
)是需要检查的重要设置

注意:Paul White在回复时提到了要检查的设置
max server memory
。一篇好的知识库文章是

帮助找出
CTFP
的良好值

讨论了MAXDOP是解决方案的一些场景


中提到了抑制并行性的组件,您应该包括SQL server的版本和service pack。这可能已在以后的版本中修复…请详细说明这些错误,好吗?我无法完全限定这些错误,但有一个特别的错误:当一个左连接预期匹配很少%的行时,将尝试假脱机两个表并循环连接,而不是仅在并行化打开的情况下进行书签查找。@Joshua,你知道这些bug是否仍然与SQL 2012、14或16版本相关吗?@HappyTown我希望这些bug已经消失,或者至少已经改变了。SQL Server的每个主要版本都对查询优化器进行了重大更改。此外,SQL Server 2014还收到了一个新的基数估计器(2016年也有了显著的改进)。称它们为bug也不完全公平,因为听起来查询结果并没有改变——它们可能是优化bug,但它们不是bug,因为您的结果会很糟糕。链接已关闭-