谷歌似乎没有该术语的定义。
答案1
答:只有在使用 SQL 7 时才会出现这种情况,因为它只发生在并行查询中。这意味着查询的一个线程正在等待来自另一个线程的消息包,而它正在等待的消息包要么被传统原因阻塞,要么遇到了某种并行性错误。
CXPacket 表示它正在等待数据包 - 即正在传递内部查询的结果。Exchange 表示它正在等待控制包 - 即等待子进程/兄弟进程告诉您它已完成。
如果查询未完成,则请确保应用了 SP1,因为 SP1 中有几个并行查询修复程序。如果仍然无法修复,则说明您遇到了未修复的错误,需要联系 Microsoft PSS 并提交错误报告。您应该能够通过向查询添加 MAXDOP(1) 来解决这个问题,这将阻止查询并行化。
此主题位于SQL团队也很有用。
答案2
CX 可能是“exchange”的简写,但由于它似乎与并行性有关,我猜它代表“context”(如“context switch”)。
补充一下 heavyd 的回答:CXPACKET 是一种等待类型,“SQL Server 使用它来协调并行性 - 通常你可以忽略它”(来自这篇文章)定义在sys.dm_os_wait_stats(MSDN,请参阅等待类型表),但我没有看到任何表明该术语特定来源的内容。该表给出了以下描述:
尝试同步查询处理器交换迭代器时发生。如果此等待类型的争用成为问题,您可以考虑降低并行度。
答案3
CXPACKET 的全称是 Class exchange packet,它发生在查询并行运行时。
答案4
CXPACKET 代表 Class Exchange Packet。在 SQL Server 中,如果 MAXDOP 设置为除 1 以外的任何值,您都会看到这种类型的等待。MAXDOP 是最大并行度。MAXDOP 的默认设置为零,这意味着查询将尝试使用所有可用核心。不要将 MAXDOP 设置为零,也不要将其设置为 1(只有一个核心会被耗尽),除非您确定永远不想使用并行性。将 MAXDOP 设置为 [核心数 - 4] 是一种常见做法。必须为服务器本身保留一些核心。如果您有超线程,这会使 MAXDOP 的设置变得复杂,请参阅 MSFT 文章:
https://support.microsoft.com/en-us/kb/2806535
SQL Server 2012 有一个最佳实践分析器 (SQL Server 2012 BPA),可帮助确定 MAXDOP 设置。
观看 Brent Ozar 关于 CXPACKET 的精彩视频:https://www.brentozar.com/archive/2013/08/what-is-the-cxpacket-wait-type-and-how-do-you-reduce-it/