【问题标题】:How can you find out what has a Service Broker conversation locked?如何找出 Service Broker 对话锁定的内容?
【发布时间】:2011-12-09 11:45:52
【问题描述】:

我有一个服务代理队列,其中有一个对话没有被任何东西处理。但是,当我运行时它没有返回任何内容:

RECEIVE TOP(1000) * FROM dbo.QueueName

但是如果我运行这个:

SELECT COUNT(*) FROM dbo.QueueName

我得到了成千上万的数字。这个数字也没有改变。我假设某个进程锁定了对话组,但没有对其进行任何操作。如何判断是否是这种情况以及如何判断哪个 SPID 拥有锁?

【问题讨论】:

    标签: sql-server sql-server-2008-r2 service-broker


    【解决方案1】:

    如果您有权访问系统视图,则 sys.dm_os_waiting_tasks 和 sys.dm_tran_locks 应该可以将您带到您需要去的地方。前者是高级别的“我的进程在等待什么”类型的东西。从中,您可以了解哪些 SPID 正在阻止您的查询。从该 SPID 列表中,您可以(如果您有兴趣)查询锁视图以查看它们持有的锁。顺便说一句,我发现数据库上的 allow_snapshot_isolation 或 read_committed_snapshot 之一有助于在最近的参与中锁定队列。

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多