识别资源上的查询等待

use*_*827 3 performance sql-server parallelism blocking waits performance-tuning

CXCONSUMER当我运行时,我有一些等待时间的查询,sp_whoisactive如下面的屏幕截图所示。

在此处输入图片说明 当我检查状态时,它是suspended。这意味着它正在等待某个进程释放资源。据我所知CXPACKET,生产者CXCONSUMER是消费者,而 CXPACKET 是罪魁祸首,应该对此采取行动。但我不”没有看到任何CXPACKET。由于这是一个并行执行,我不确定应该从哪里开始修复。

任何人都可以建议我如何找出我的查询正在等待的过程(因为我将挂起视为状态)?

附加信息

当我查询时sys.dm_os_wait_stats,前两个条目是 CONSUMER 和 CXPACKETS。

  • SQL Server 2016
  • 128 GB 内存
  • 最大 DOP : 8
  • 门槛成本:20

Jos*_*ell 5

查看 Erik Darling 的这篇文章:CXCONSUMER 是无害的吗?没那么快,老虎

这显示了一个非常极端的问题查询示例,其中 CXCONUSMER 是最高等待时间。因此,虽然 Microsoft 的建议表明它是无害的,但它绝对可能是其他问题的迹象。

基于此以及您的屏幕截图,您很可能会遇到偏斜并行性问题。您可以从 Paul Randal 找到一些关于偏斜并行的重要信息:更多关于 CXPACKET 等待:偏斜并行

理论上讲,由于倾斜并行性导致的等待应该作为 CXPACKET 等待出现。不过,目前在实践中似乎并非总是如此。

如果没有查询文本,尤其是实际的执行计划,我们只能猜测可能导致 CXCONSUMER 等待您的场景的原因。但希望这有助于为您提供一个方向。

如果您编辑问题以包含执行计划和查询文本(以及相关的表/索引定义),我们可以在追踪根本原因方面提供更多帮助。