ASYNC_NETWORK_IO 等待类型是否会导致线程锁定,直到客户端应用程序消耗整个结果?

var*_*ble 0 sql-server wait-types waits sql-server-2019

ASYNC_NETWORK_IO 等待类型主要是由于客户端应用程序无法足够快地处理从 SQL Server 到达的数据而引起的。

当查询执行时,当结果开始可供使用时,客户端应用程序开始使用结果。假设结果由 4 个线程保存,那么,在结果完全被客户端应用程序消耗之前,保存数据的线程是否保持锁定状态?

Pau*_*ite 6

\n

假设结果由 4 个线程保存,那么,在结果完全被客户端应用程序消耗之前,保存数据的线程是否保持锁定状态?

\n
\n

不必要; 这取决于执行计划的形状。

\n

结果行被组装成数据包,以便由与父任务关联的工作线程传输到客户端。ASYNC_NETWORK_IO如果客户端消耗结果的速度很慢,该线程将被阻塞并等待。只有父任务的工作线程将行返回给客户端。

\n

在计划的其他区域中活动的其他并行工作线程独立运行,并且不直接了解父任务的状态。通常,即使父任务的工作线程正在等待,它们也可以继续执行。

\n

也就是说,这些并行工作线程最终将生成需要由父任务消耗的行。当交换缓冲区已满时,并行工作线程也会经历等待,CXCONSUMER直到CXPACKET父任务的工作线程恢复并从交换中读取行。

\n

有关父任务以及并行执行如何工作的更多背景信息,请参阅我的文章:

\n\n