整理SQL Server中經常出現的等待類型。
一,CXCONSUMER
CXCONSUMER: Occurs with parallel query plans when a consumer thread waits for a producer thread to send rows. This is a normal part of parallel query execution.
CXCONSUMER等待最簡單解釋是:有並發的查詢計划在運行,通常可以被忽略,該等待類型從SQL Server 2017 RTM CU4時開始正式使用。之前的CXPACKET 等待被拆分成良性(benign )和可操作(actionable)的等待兩種,CXCONSUMER 用於表示 良性的CXPACKET,而 CXPACKET 用於表示 可操作性的CXPACKET。
對於一些並發查詢計划來說,使用多線程來執行查詢,有些子線程會產生數據,稱作生產者線程,有些線程來消耗數據,稱作消費者線程。雖然生產者線程和消費者線程都會注冊CXPACKET等待,但是消費者線程注冊的CXPACKET等待是不可操作的,這是因為生產者線程注冊的CXPACKET 等待導致消費者線程必須等待,而生產者線程是可以操作的。通過拆分消費者等待,應該減少CXPACKET等待的數量,並對剩余的等待事件進行調查。
通過單獨把消費者的CXPACKET 等待拆分成 CXCONSUMER等待,來區分並發等待的類型。當出現CXPACKET等待,表示生產者線程出現性能問題,消費者線程等待生產者線程提供數據;當偶爾出現CXCONSUMER等待時,通常可以被忽略,但是,當經常出現CXCONSUMER等待時,就表示消費者線程出現性能問題,消費者進程無法及時把數據處理完成。
參考文檔:
