当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《在SQLServer中使用OPTION(MAXDOP1)的目的是什么?》经验,为你挑选了3个好方法。

我从未清楚地理解MAXDOP的用法.我知道它使查询更快,并且它是我可以用于查询优化的最后一项.

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



1> Jeremiah Pes..:

正如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:

在线书籍:并行度

用于配置MAXDOP选项的一般准则



2> Jonas Lincol..:

这是SQL Server中并行性的一般漫无边际,它可能无法直接回答您的问题.

来自联机丛书,关于MAXDOP:

设置查询处理器可用于执行单个索引语句的最大处理器数.根据当前系统工作负载,可以使用更少的处理器.

请参阅Rickie Lee关于并行性和CXPACKET等待类型的博客.这很有趣.

通常,在OLTP数据库中,我的观点是,如果查询成本太高,需要在多个处理器上执行,则需要将查询重写为更高效的内容.

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



3> 小智..:

作为一个例外,MAXDOP显然可以用作一个可能令人讨厌的bug的变通方法:

返回的标识值并不总是正确的


链接已关闭 - [镜像](https://web.archive.org/web/20130412223343/https://connect.microsoft.com/SQLServer/feedback/details/328811/scope-identity-sometimes-returns-incorrect-值)
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有