SQL Server中的最大并行度(max degree of parallelism)如何设置呢? 设置max degree of parallelism有什么好的建议和指导方针呢?在微软官方文档Recommendations and guidelines for the "max degree of parallelism" configuration option in SQL Server有这方面的建议和指导方针
Use the following guidelines when you configure the MAXDOP value.
SQL Server 2005 and later versions
Server with single NUMA node |
Less than 8 logical processors |
Keep MAXDOP at or below # of logical processors |
Server with single NUMA node |
Greater than 8 logical processors |
Keep MAXDOP at 8 |
Server with multiple NUMA nodes |
Less than 8 logical processors per NUMA node |
Keep MAXDOP at or below # of logical processors per NUMA node |
Server with multiple NUMA nodes |
Greater than 8 logical processors per NUMA node |
Keep MAXDOP at 8 |
个人觉得上面关于(max degree of parallelism)的建议、指导方针有点抽象、不太科学。因为不同的系统的负载可能不一样。这样一个笼统的建议实在让人觉得缺少合理的依据。
另外一种关于(max degree of parallelism)的推荐设置是根据系统类型(也可以理解为系统负载)来设置,具体建议如下所示:
OLTP系统:
在纯OLTP系统上,它的事务较短,SQL查询时间短,但是非常频繁。设置“Maximum degree of Parallelism”(MAXDOP)为1。这样做可以确保查询永远不必使用并行方式运行,并且不会导致更多的数据库引擎开销。
OLAP系统:
Data-warehousing / Reporting server: 因为查询执行时间一般较长,建议设置“Maximum degree of Parallelism”(MAXDOP)为0。
这样大多数查询将会利用并行处理,执行时间较长的查询也会受益于多处理器而提高性能。
混合系统
Mixed System (OLTP & OLAP):这样环境会是一个挑战,必须找到正确的平衡点。一般采取了非常简单的方法。设置“Maximum degree of
Parallelism”(MAXDOP)为 2,这样意味着查询仍会使用并行操作但是仅利用2颗CPU。并且把“并行查询阀值”(cost threshold for parallelism)设置为较高的值,这样的话,不是所有的查询都有资格使用并行,除了那些查询成本较高的查询………
cost threshold for parallelism 选项可设置为 0 到 32767 之间的任何值。默认值为 5。
个人比较倾向于第二种(max degree of parallelism)设置的指导方针,混合系统设置max degree of parallelism,建议结合第一种推荐设置与第二种,然后结合等待事件CXPACKET的情况,作出适当的调整。不要指望一成不变的推荐设置,这样 是不合理。只能根据比较大众的推荐设置,然后结合自身系统的具体情况,作出适当的调整、优化。
对于NUMA与SMP不太清楚的地方,可以参考下面资料。
传统的多核运算是使用 SMP(Symmetric Multi-Processor )模式:将多个处理器与一个集中的存储器和I/O总线相连。所有处理器只能访问同一个物理存储器,因此SMP系统有时也被称为一致存储器访问(UMA)结 构体系,一致性意指无论在什么时候,处理器只能为内存的每个数据保持或共享唯一一个数值。很显然,SMP的缺点是可伸缩性有限,因为在存储器和I/O接口 达到饱和的时候,增加处理器并不能获得更高的性能。
NUMA模式是一种分布式存储器访问方式,处理 器可以同时访问不同的存储器地址,大幅度提高并行性。 NUMA模式下,处理器被划分成多个"节点"(node), 每个节点被分配有的本地存储器空间。 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。
SQL Server 2005开始支持NUMA,可参考SQL Server 2008的NUMA支持 。需要注意的是,硬件、操作系统、应用软件 三者都要支持 NUMA ,才能充分利用这一特性