【问题标题】:What does "lock | communication buffer resources" mean?“锁定|通信缓冲区资源”是什么意思?
【发布时间】:2013-09-25 04:19:39
【问题描述】:

我有一个报告死锁的错误日志:

事务(进程 ID 55)在 lock | 上被死锁与另一个进程通信缓冲区资源,并已被选为死锁牺牲品。重新运行事务。

我正在尝试重现此错误,但我的标准死锁 SQL 代码会产生 不同 错误:

事务(进程 ID 54)在 锁定资源 上与另一个进程发生死锁,并已被选为死锁牺牲品。重新运行事务。

我想非常清楚我不是在问什么是死锁。我确实了解基础知识。

我的问题是:lock | communication buffer resources 在这种情况下是什么意思?什么是“通信缓冲资源”? lock | 有什么含义吗?

我最好的猜测是当并行线程组合它们的结果时使用了通信缓冲区。任何人都可以确认或否认这一点吗?

我的最终目标是以某种方式触发第一个错误再次发生。

【问题讨论】:

  • AFAIK 您的“最佳猜测”是准确的,您将从并行计划中看到此消息。你还在收到这些错误吗?如果是这样,您可以从默认扩展事件会话中检索死锁图吗?
  • @BillHurt 有趣!我没见过。
  • @RhianA 谢谢,但请阅读问题中的粗体字。又是这样:我不是在问什么是死锁。
  • 在 DBA Stackexchange 上也可以看到这个非常相似的问题:dba.stackexchange.com/questions/49538/…

标签: sql-server sql-server-2008 deadlock database-deadlocks


【解决方案1】:

您的问题与并行性有关,并且该错误“没有意义”,因为错误消息没有反映您的问题,不要去更改 maxdope 设置。为了找到错误的原因,您需要使用跟踪标志 1204 , have a look as to how to use the trace flag and what info you get

当您这样做时,您会得到关于为什么、在何处以及哪一行代码导致锁定的答案。我想你可以从那时起用谷歌搜索你自己,如果没有,然后发布它,你会得到你需要的答案。

【讨论】:

    【解决方案2】:

    我会将消息解释为锁定资源或通信缓冲区资源的某种组合上的死锁。 “锁资源”是普通的对象锁,“通信缓冲区资源”是用于合并并行查询结果的交换事件。这些在https://blogs.msdn.microsoft.com/bartd/2008/09/24/todays-annoyingly-unwieldy-term-intra-query-parallel-thread-deadlocks/ 中有进一步描述,其中相关段落是:

    “exchangeEvent”资源表示查询计划中存在并行运算符。这个想法是将诸如大型扫描、排序或连接之类的操作的工作分开,以便可以在多个子线程上执行。有“生产者”线程完成繁重的工作并将行集提供给“消费者”。查询内并行需要在这些工作线程之间发出信号:消费者可能必须等待生产者向他们提供更多数据,而生产者可能必须等待消费者完成最后一批数据的处理。与并行性相关的等待在 SQL DMV 中显示为 CXPACKET 或 EXCHANGE 等待类型(请注意,这些等待类型的存在是正常的,只是表明存在并行查询执行——这些等待本身并不表示这种类型或任何其他类型的死锁正在发生)。

    我见过的其中一个死锁图包括一组只有一个 SPID 的进程以及一个对象锁和交换事件图。我猜消息 "Transaction (Process ID 55) was deadlocked on lock | 与另一个进程的通信缓冲区资源已被选为死锁受害者。重新运行事务" 出现而不是 "Intra -查询并行性导致您的服务器命令(进程 ID #51)死锁。由于对象锁和交换事件的组合,使用查询提示选项 (maxdop 1) 重新运行没有查询内并行性的查询",否则自撰写本文以来,SQL Server 中的消息已更改。

    【讨论】:

      【解决方案3】:

      您可以使用 MAXDOP 1 作为查询提示 - 即在一个 cpu 上运行该查询 - 而不会影响服务器的其余部分。

      这将避免该查询的错误 - 不会告诉您它失败的原因,但如果您必须让它快速运行,它确实提供了一种解决方法:-)

      【讨论】:

      • 我的问题是:lock是什么意思 |在这种情况下通信缓冲资源?什么是“通信缓冲资源”?有锁吗?表示什么?
      • 简单意味着您无法对特定行执行更新,因为会话正在使用它。
      猜你喜欢
      • 1970-01-01
      • 2010-10-13
      • 2023-03-18
      • 1970-01-01
      • 2013-02-09
      • 2011-10-09
      • 2019-01-30
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多