首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server和设置MAXDOP的效果

SQL Server和设置MAXDOP的效果
EN

Stack Overflow用户
提问于 2016-09-29 17:57:07
回答 1查看 251关注 0票数 1

我对MAXDOP到底做了什么感到困惑。我读到它将SQL查询限制为在MAXDOP指定的处理器数量上运行;在其他文章中,他们说MAXDOP限制了查询中操作符所受的处理器数量的约束。

如果我有一个有4个CPU的系统,并且我将MAXDOP设置为2,然后运行一个简单的查询,该查询将有两个并行的索引扫描,我可以看到我最终得到了5个线程。

由于MAXDOP设置,这5个线程是否会被限制为只能在2个CPU上运行?

EN

回答 1

Stack Overflow用户

发布于 2016-09-29 20:40:26

MAXDOP提示限制每个并行操作符使用的线程数和查询计划中所有并行操作符使用的逻辑CPU总数。This post对此进行了更详细的解释。

使用您的问题中提到的2个并行索引扫描,每个并行扫描被限制为2个线程,总共4个并行线程。这些并行线程的任务共享MAXDOP数字指定的相同CPU。同一个CPU上一次最多只能有1个工作线程处于活动状态,因此在任何给定时间用于并行操作的CPU总数都受到MAXDOP的限制。但是,您还将有另一个线程用于其他计划操作符,该线程不被视为MAXDOP的一部分,因此查询可以同时使用最多3个核心。

在查询执行期间运行此查询,您应该看到一次在给定调度程序上运行的任务不超过一个:

代码语言:javascript
复制
SELECT  ost.session_id
      , ost.scheduler_id
      , w.worker_address
      , ost.task_state
      , wt.wait_type
      , wt.wait_duration_ms
FROM    sys.dm_os_tasks ost
        LEFT JOIN sys.dm_os_workers w ON ost.worker_address = w.worker_address
        LEFT JOIN sys.dm_os_waiting_tasks wt ON w.task_address = wt.waiting_task_address
WHERE   ost.session_id = 54
ORDER BY scheduler_id;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39767157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档