sp_who 返回的行数多于“最大并行度”的值

u23*_*534 5 sql-server parallelism

sp_configure 在服务器上返回以下值。

名称最小最大 config_value run_value
最大并行度 0 32767 8 8

但是,sp_who1sp_WhoIsActive表明某些spid有超过 8 行(例如 18 行左右)。在这种情况下,最多不应该是 8 行吗?

这个查询不时返回很多行:

SELECT * 
FROM sys.sysprocesses sp
where exists 
(
    select spid 
    from sys.sysprocesses 
    where spid =sp.spid 
    and sp.waitresource = ''
    group by spid 
    having count(*)>9
)
Run Code Online (Sandbox Code Playgroud)

Pau*_*ite 10

在这种情况下,最多不应该是 8 行吗?

否,因为单个执行计划可以使用比有效并行度 (DOP) 指定的更多线程

在给定的时刻,调度程序上只有最多的 DOP 线程处于活动状态。SQL Server(2005 以后)将并行查询限制为 DOP 调度程序,而不是 DOP 线程。

由于调度程序抽象了一个逻辑处理器,这有效地限制了所需的并行性。

DOP 线程被分配给每个并行分支,其中一个分支由并行(交换)操作符定界。

有关更多信息,请参阅我的 Simple Talk 文章:

理解和使用 SQL Server 中的并行性

和/或我的 PASS Summit 2013 会议记录:

并行查询执行