我有 8 个 CPU 的 SQL Server。最大工作线程设置为 850。最大 dop 为 8。并行性的成本线程保持为 50。
这意味着 sql server 会将高于成本阈值的查询分解为 8 个线程。由于每个线程都在一个 cpu 上运行,那么这是否意味着在当前运行的 8 个线程中至少有一个被释放之前,不允许其他用户运行查询?
那么设置 max dop = cpu 数量会导致单个查询阻塞其他查询的情况吗?
除了其他帖子之外:
一旦任务被授予对核心的访问权限,它就有大约 4 毫秒的时间来做它想做的事情。约 4 毫秒后,它会屈服,因此下一个队列将有权访问核心(协作多任务处理)。
任务被授予对核心的访问权限后,您可能会得到 3 种不同的结果:
以上均未导致阻塞。
当然,线程不自行放弃核心(非屈服)可能会出现问题,但这不是正常情况,在这种情况下应该进行故障排除。
MAXDOP是用于处理特定执行查询(或服务器级别的所有查询,如果以这种方式配置)的查询计划的并行化分支的额外工作线程的最大并行度。这意味着它是一个上限阈值,以确保执行时查询的运算符分支不能同时超过该线程数。
服务器上的默认设置为 0,这意味着查询计划的操作分支可以进行的并行度没有限制。因此,通过设置MAXDOP,您可以做得不比现有默认值更差。事实上,在具有 8 个 CPU 的示例服务器中,设置MAXDOP为 8 与默认值 0 相同,即无阈值。有关适当配置的更多信息,请参阅 Brent Ozar 的《配置并行性混乱》 。
另一件需要记住的有趣的事情MAXDOP是,并行计划的整个查询计划的并发运行线程的最大数量可以达到设置为加 1 的任何值。这是因为仍然有原始线程充当父任务为计划的并行分支内的不同操作员启动和协调其他并行线程。
| 归档时间: |
|
| 查看次数: |
1390 次 |
| 最近记录: |