整理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等待时,就表示消费者线程出现性能问题,消费者进程无法及时把数据处理完成。
参考文档: