2008-10-02 171 views
41

我从来没有清楚地了解MAXDOP的用法。我知道它使查询更快,并且它是我可以用于查询优化的最后一项。在SQL Server中使用OPTION(MAXDOP 1)的目的是什么?

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

+1

提到您应包括SQL Server的版本和服务包。这可能已在更高版本中得到修复... – 2008-12-19 02:54:07

回答

18

这是SQL Server中并行性的泛泛,它可能不会直接回答你的问题。

从联机丛书,在MAXDOP:

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

关于并行性和CXPACKET等待类型请参见Rickie Lee's blog。这很有趣。

一般来说,在一个OLTP数据库中,我的观点是,如果一个查询如此昂贵,需要在多个处理器上执行,那么查询需要重新编写成更有效率的东西。

为什么添加MAXDOP(1)可以获得更好的结果?很难说没有实际的执行计划,但它可能非常简单,因为执行计划完全不同于没有OPTION,例如使用MERGE或HASH联接使用不同索引(或更可能)以不同方式联接。

20

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

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

联机丛书接着说,对于MAXDOP可能的值是:

0 - 使用取决于当前的系统负载可用的CPU的实际数量。这是默认值和推荐设置。

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

2-64 - 将处理器数限制为指定值。取决于当前的工作量,可以使用更少的处理器。如果指定的值大于可用CPU的数量,则使用可用CPU的实际数量。

我不知道的MAXDOP的最佳用法是什么,但我会采取一种猜测,并说,如果你有与它8个分区的表,你会想指定MAXDOP(8)由于I/O限制,但我可能是错的。

这里有几个快速链接我发现了大约MAXDOP

Books Online: Degree of Parallelism

General guidelines to use to configure the MAXDOP option

3

有与异常输入SQL服务器一对夫妇parallization错误。 OPTION(MAXDOP 1)将避开它们。

编辑:老。我的测试主要是在SQL 2005上完成的。大部分这些似乎都不存在了,但每隔一段时间我们就会质疑SQL 2014做些什么愚蠢的假设,我们回到旧的方式并且工作。我们从来没有设法证明它不仅仅是最近一些案例中的错误计划,尽管由于可以依靠SQL服务器在新版本中使用旧的方式。由于所有情况都是IO绑定查询,所以MAXDOP 1不会受到伤害。

+1

请您详细说明这些错误吗? – 2010-06-28 13:02:33

+2

我无法完全限定错误,但特别是:当预期左连接匹配的行数很少时,会尝试对表和循环连接进行后台处理,而不是对并行化进行书签查找。 – Joshua 2010-06-28 16:50:36

0

添加我的两分钱的基础上,我观察到的性能问题。

如果简单查询得到不必要的并行处理,它会带来更多的问题而不是解决问题。但是,在将MAXD​​OP添加到查询中作为“拐点”修复之前,需要检查一些服务器设置。

Jeremiah Peschka - Five SQL Server Settings to Change中,MAXDOP和“并行性的成本阈值”(CTFP)被提及为重要的设置来检查。

注:保罗·怀特提到max server memory作为一个设置来检查,在Performance problem after migration from SQL Server 2005 to 2012的回应。一个好的kb的文章阅读是Using large amounts of memory can result in an inefficient plan in SQL Server

Jonathan Kehayias - Tuning ‘cost threshold for parallelism’ from the Plan Cache帮助找出良好的价值为CTFP

Why is cost threshold for parallelism ignored?

Aaron Bertrand - Six reasons you should be nervous about parallelism具有的一些场景,其中MAXDOP是解决方案的讨论。

并行性抑制组分在Paul White - Forcing a Parallel Query Execution Plan