我知道并行计划将使用(最多)与 MAXDOP 配置(每个并行区域)中设置的一样多的内核。
我已将我的 MAXDOP 配置为 4,并将我的“并行成本阈值”配置为 55。所以,我的问题是……所有成本低于 55 的串行计划是否只使用第一个内核?
如果是这样的话……如果我的查询主要是低成本的,那么我的第一个核心将被耗尽,而其余的核心将处于空闲状态。
我知道并行计划将使用(最多)与 MAXDOP 配置(每个并行区域)中设置的一样多的内核。
我已将我的 MAXDOP 配置为 4,并将我的“并行成本阈值”配置为 55。所以,我的问题是……所有成本低于 55 的串行计划是否只使用第一个内核?
如果是这样的话……如果我的查询主要是低成本的,那么我的第一个核心将被耗尽,而其余的核心将处于空闲状态。
根据复杂性,您的查询执行计划可以包含串行和并行组件。
在 SQL Server 中,您的复杂或简单查询/批处理称为请求,因此通过sys.dm_exec_requests管理视图进行监控。
然后将请求拆分为不同的工作负载,这些工作负载在 SQL Server 中表示为一个任务。一个请求可以是多个顺序或并行的任务,它们都属于同一个请求。在sys.dm_os_tasks管理视图中监视任务。
任务依次移交给作为操作系统线程的逻辑表示的工作线程。sqlsrvr.exe 进程将有许多线程,可以在处理器(核心)上执行计算。
例如,当线程正在等待返回的数据时,如果可以在当前任务等待时释放线程以执行另一个任务会更好。这是由调度程序执行的,它是......
线程不绑定到特定的核心/处理器,除非进程关联已在操作系统级别打开。
(强调我的)
参考:线程和任务架构指南(Microsoft | SQL Docs)
回答你的问题
不,您的串行任务(不是计划)将根据系统的整体工作负载在任何可用内核上执行。
串行计划可以“绑定”到任何启用的核心(调度程序在线)。它不受第一个核心的约束。