CXPACKET SUSPENDED 和 NULL 等待类型

Tom*_*Tom 3 sql-server wait-types

我正在运行这篇文章中的查询:

http://sqlity.net/en/708/why-cxpacket-waits-are-not-your-performance-problem/

查看我的线程在等待类型为 CXPACKET 的挂起查询方面正在等待什么。

但是,对于有问题的 SPID,正在运行的线程显示 NULL 的等待类型,而每个其他线程都处于 SUSPENDED 状态,等待类型为 CXPACKET。

我期待其中一个线程具有除 CXPACKET 之外的某种等待类型,谁能向我解释在这种情况下发生了什么?

谢谢

Kri*_*yer 6

您看到的是具有 CXPACKET 等待的线程实际上已经完成了它们必须做的任何工作,现在正在等待其他活动线程(等待类型为 NULL 的线程)完成。

布伦特·奥(Brent O)用教室做了一个很好的类比。老师向全班分发一堆不同的纸,让他们在上面找出单词。我们需要考虑的是这样一个事实:1)纸叠的大小可能不同2)不同的学生比其他学生阅读得更快/更慢3)一个学生可能会在第一页上找到该单词一次,而下一个学生可能会在第一页上找到该单词一次在 3000 个页面中查找了 400 次。

当您处理并行性时,您会看到一种自然且预期的行为,某些线程比其他线程完成得更快,并且被迫等待直到其他线程完成,重新收集所有线程并为您提供输出。

http://www.brentozar.com/archive/2013/08/what-is-the-cxpacket-wait-type-and-how-do-you-reduce-it/


Nik*_*laD 5

对于年轻的 DBA 来说,CXPACKET 总是令人困惑的等待类型,通常会出现一些可预见的错误反应。CXPACKLET 等待类型有多个方面,我已经在 SQL Server文章中的对CXPACKET 等待类型进行故障排除中尝试了将大多数 CXPACKET 高的原因放在表中,但也解释了 CXPACKET 的背景,作为正确的理解SQL Server 中的并行性是理解的关键

因此,对于那些不想详细了解的人,我将在此处发布文章摘要(但我绝对建议阅读文章以获取有关 CXPACKET 等待类型的完整信息):

  • 不要将 MAXDOP 设置为 1,因为这永远不是解决方案

  • 调查查询和 CXPACKET 历史以了解并确定它是否只发生了一次或两次,
    因为它可能只是正常
    工作的系统中的异常

  • 检查查询使用的表的索引和统计信息,并确保它们是最新的

  • 检查并行成本阈值 (CTFP) 并确保使用的值适合您的系统

  • 检查 CXPACKET 是否带有 LATCH_XX(也可能带有 PAGEIOLATCH_XX 或 SOS_SCHEDULER_YIELD)。如果是这种
    情况,则应降低 MAXDOP 值以适合您的硬件

  • 检查 CXPACKET 是否伴随着 LCK_M_XX(通常伴随着 IO_COMPLETION 和 ASYNC_IO_COMPLETION)。如果是
    这种情况,那么并行性就不是瓶颈。对这些
    等待统计信息进行故障排除以找到问题的根本原因和解决方案