【发布时间】: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