我正在运行这篇文章中的查询:
http://sqlity.net/en/708/why-cxpacket-waits-are-not-your-performance-problem/
查看我的线程在等待类型为 CXPACKET 的挂起查询方面正在等待什么。
然而,对于有问题的 SPID,正在运行的线程显示等待类型为 NULL,而其他每个线程都处于 SUSPENDED 状态,等待类型为 CXPACKET。
我期待其中一个线程具有除 CXPACKET 以外的某种等待类型,谁能向我解释在这种情况下发生了什么?
谢谢
对于年轻的 DBA,CXPACKET 总是令人困惑的等待类型,通常会出现一些可预见的错误反应。CXPACKLET等待类型有多个方面,我在SQL Server中的CXPACKET等待类型疑难解答一文中尝试过,提出了CXPACKET高的大部分原因,同时也解释了CXPACKET的背景,作为正确的理解SQL Server 中的并行性是理解的关键
因此,对于那些不想详细了解的人,我将在此处发布文章摘要(但我绝对建议阅读文章以获取有关 CXPACKET 等待类型的完整信息):
您所看到的是具有 CXPACKET 等待的线程实际上已经完成了他们必须做的任何工作,现在正在等待其他活动线程(以 NULL 作为等待类型的线程)完成。
Brent O 用教室做了一个很好的类比。老师给全班分发一堆不同的纸,让他们在上面找到一个单词。我们需要考虑的是 1) 纸叠的大小可能不同 2) 不同的学生阅读速度比其他学生快/慢 3) 一个学生可能会在第一页找到单词 1 次,而下一个可能在 3000 页中找到 400 次。
当您处理并行时,您会看到一种自然且预期的行为,一些线程比其他线程完成得更快,并且被迫等到其他线程完成,重新收集所有线程并为您提供输出。
http://www.brentozar.com/archive/2013/08/what-is-the-cxpacket-wait-type-and-how-do-you-reduce-it/