WAITFOR 可以增加 CXPACKET 等待吗?

dwj*_*wjv 4 sql-server parallelism wait-types

如果我有一些像这样的 T-SQL 代码:

While @done<1
Begin
WAITFOR DELAY '00:00:30';
Set @done=<some select statement>
End
Run Code Online (Sandbox Code Playgroud)

这可能会增加等待CXPACKET吗?据推测,其他处理器将在WAITFOR运行时等待?

Tho*_*ger 8

当你发出一个WAITFOR命令,任务将开始具有wait_typeWAITFOR。这是一种良性等待类型,可以忽略。

同样,当此任务进入挂起状态时,它将脱离调度程序(处理器),因此不会占用工作人员时间。我们可以通过一个简单的例子看到这一点:

use AdventureWorks2012;
go

waitfor delay '00:10:00';
go
Run Code Online (Sandbox Code Playgroud)

在另一个窗口中,您可以运行以下命令:

select
    session_id,
    command,
    status,
    wait_type
from sys.dm_exec_requests
where command = 'waitfor';
Run Code Online (Sandbox Code Playgroud)

我的结果如下:

session_id  command   status      wait_type
54          WAITFOR   suspended   WAITFOR
Run Code Online (Sandbox Code Playgroud)

至于你这是如何将反映的问题sys.dm_os_wait_stats中,在WAITFOR等待类型的完成,它就会递增WAITFOR型在sys.dm_os_wait_stats该任务在等待时间:

select *
from sys.dm_os_wait_stats
where wait_type = 'waitfor';
Run Code Online (Sandbox Code Playgroud)

但如前所述,WAITFOR等待类型是良性的,通常可以忽略。