我从来没有清楚地了解MAXDOP的用法。我知道它使查询更快,并且它是我可以用于查询优化的最后一项。在SQL Server中使用OPTION(MAXDOP 1)的目的是什么?
但是,我的问题是,何时何地最适合在查询中使用?
我从来没有清楚地了解MAXDOP的用法。我知道它使查询更快,并且它是我可以用于查询优化的最后一项。在SQL Server中使用OPTION(MAXDOP 1)的目的是什么?
但是,我的问题是,何时何地最适合在查询中使用?
这是SQL Server中并行性的泛泛,它可能不会直接回答你的问题。
从联机丛书,在MAXDOP:
设置查询处理器可用于执行 单一索引的语句处理器 的最大数量。可能会使用更少的 处理器,具体取决于当前系统的工作负载。
关于并行性和CXPACKET等待类型请参见Rickie Lee's blog。这很有趣。
一般来说,在一个OLTP数据库中,我的观点是,如果一个查询如此昂贵,需要在多个处理器上执行,那么查询需要重新编写成更有效率的东西。
为什么添加MAXDOP(1)可以获得更好的结果?很难说没有实际的执行计划,但它可能非常简单,因为执行计划完全不同于没有OPTION,例如使用MERGE或HASH联接使用不同索引(或更可能)以不同方式联接。
正如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
:
有与异常输入SQL服务器一对夫妇parallization错误。 OPTION(MAXDOP 1)将避开它们。
编辑:老。我的测试主要是在SQL 2005上完成的。大部分这些似乎都不存在了,但每隔一段时间我们就会质疑SQL 2014做些什么愚蠢的假设,我们回到旧的方式并且工作。我们从来没有设法证明它不仅仅是最近一些案例中的错误计划,尽管由于可以依靠SQL服务器在新版本中使用旧的方式。由于所有情况都是IO绑定查询,所以MAXDOP 1不会受到伤害。
请您详细说明这些错误吗? – 2010-06-28 13:02:33
我无法完全限定错误,但特别是:当预期左连接匹配的行数很少时,会尝试对表和循环连接进行后台处理,而不是对并行化进行书签查找。 – Joshua 2010-06-28 16:50:36
由于顺便说一句什么,MAXDOP显然可以作为一种变通方法,以一个潜在的讨厌的错误:
添加我的两分钱的基础上,我观察到的性能问题。
如果简单查询得到不必要的并行处理,它会带来更多的问题而不是解决问题。但是,在将MAXDOP添加到查询中作为“拐点”修复之前,需要检查一些服务器设置。
在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
提到您应包括SQL Server的版本和服务包。这可能已在更高版本中得到修复... – 2008-12-19 02:54:07