一般而言,设置并行性的最佳做法是什么?我知道SQL Server默认0
使用所有可用的处理器,但是您想在哪种情况下更改此默认行为?
我记得在某处(我必须去看这篇文章)读过一篇文章,对于OLTP工作负载,您应该关闭并行性(将maxdop设置为1
)。我认为我不完全理解您为什么要这样做。
什么时候可以将maxdop保持为SQL Server(0)?什么时候关闭并行性(1)?您何时将maxdop明确声明给特定数量的处理器?
是什么导致并行性?
一般而言,设置并行性的最佳做法是什么?我知道SQL Server默认0
使用所有可用的处理器,但是您想在哪种情况下更改此默认行为?
我记得在某处(我必须去看这篇文章)读过一篇文章,对于OLTP工作负载,您应该关闭并行性(将maxdop设置为1
)。我认为我不完全理解您为什么要这样做。
什么时候可以将maxdop保持为SQL Server(0)?什么时候关闭并行性(1)?您何时将maxdop明确声明给特定数量的处理器?
是什么导致并行性?
Answers:
您通常不希望禁用并行性,因为这也会在管理任务中禁用并行性。最好的选择是通过添加或修复索引或完全更改模式来修复导致并行性的查询。
根据您更新的问题...
有些人会将供应商构建的应用程序的MAXDOP更改为1,因为他们无法控制数据库或架构,并且他们不希望单个查询来接管整个系统。
我个人总是将MAXDOP保持为0,除了极少数情况。
并行性是由执行计划中的单个操作引起的,其执行成本超过了预设设置(并行性设置的成本阈值)。发生这种情况时,SQL Server将以并行方式启动,以便它可以对请求进行多线程处理,以加快处理速度。并行度的成本阈值的默认值为5。在许多OLTP平台中,您希望将其提高到30或40,这样并行度才可用于真正昂贵的查询。
我从来没有见过需要一直使用SQL Server(上一千年,SQL Sever 6.5)关闭或修改任何并行设置。
接下来是@StanleyJohns的答案...
短而尖锐的查询的OLTP系统永远都不会达到成本阈值(“并行性的成本阈值”),因此无关紧要。如果您有并行执行的查询,那么为什么要基于未经验证的条件来限制它
我还没有看到纯OLTP系统。在极端情况下,也许有,但是平均系统也有报告。无论是白天还是晚上。这些查询更可能并行进行并从中受益。
当今有如此多的CPU内核可用,如果可以衡量并注意到差异,则可以说是设置全局“最大并行度”的情况。
就像我说的,我的建议是什么都不做。与@mrdenny相似,但我将包括“没有纯OLTP系统之类的东西”
话说回来,在BIOS级别禁用超线程内核可能有一些困难,但这是一个不同的问题...
另外请看
是什么导致并行性?:有一个称为的设置cost threshold for parallelism
。一旦超过此阈值,则使用并行性(如果满足先决条件)。
OLTP系统的性质是要进行大量的快速交易和短期交易。使用并行机制有时会增加查询处理时间,因为查询将被拆分为并行处理,然后在返回之前将其缝合在一起。因此,您将看到将maxdop设置为1的建议。
将maxdop设置为1的好处之一是默认情况下关闭了并行性,但是您可以使用在查询级别启用它query hints
。
对于返回大型结果集的数据仓库系统或OLAP系统,使用并行度拆分查询可能会有好处。这使查询可以利用可用内核来缩短查询处理时间。